iphone - 点击 MapKit 注释时应用程序崩溃

标签 iphone ios mapkit mkannotation sigabrt

我正在开发应用程序来虚拟化 Twitter 趋势。我获取了地点的位置并为每个地点创建注释。不幸的是,当我点击注释时,应用程序崩溃并在 main.m 文件上给出 sigabrt 错误。在我第一次运行时它有效,但此后每次我都会收到错误。我不知道我改变了什么。

   2012-01-15 12:34:29.786 twittertrends[1248:ef03] -[NSCFNumber stringByStandardizingWhitespace]: unrecognized selector sent to instance 0x5854b10
    2012-01-15 12:34:29.790 twittertrends[1248:ef03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber stringByStandardizingWhitespace]: unrecognized selector sent to instance 0x5854b10'
    *** Call stack at first throw:
    (
        0   CoreFoundation                      0x012725a9 __exceptionPreprocess + 185
        1   libobjc.A.dylib                     0x013c6313 objc_exception_throw + 44
        2   CoreFoundation                      0x012740bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
        3   CoreFoundation                      0x011e3966 ___forwarding___ + 966
        4   CoreFoundation                      0x011e3522 _CF_forwarding_prep_0 + 50
        5   UIKit                               0x005f4340 -[UICalloutView setSubtitle:animated:] + 88
        6   UIKit                               0x005f4010 -[UICalloutView setSubtitle:] + 49
        7   MapKit                              0x003630ac -[MKAnnotationContainerView _showBubbleForAnnotationView:bounce:scrollToFit:userInitiated:avoid:] + 537
        8   MapKit                              0x003643ed -[MKAnnotationContainerView _setSelectedAnnotationView:bounce:pressed:scrollToFit:userInitiated:avoid:] + 653
        9   MapKit                              0x0035d4bc -[MKAnnotationContainerView _setSelectedAnnotationView:bounce:pressed:scrollToFit:userInitiated:] + 144
        10  MapKit                              0x00334ab3 -[MKMapView handleTap:] + 459
        11  UIKit                               0x007554f2 -[UIGestureRecognizer _updateGestureWithEvent:] + 730
        12  UIKit                               0x007514fe -[UIGestureRecognizer _delayedUpdateGesture] + 47
        13  UIKit                               0x00757afc _UIGestureRecognizerUpdateObserver + 584
        14  CoreFoundation                      0x0125389b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
        15  CoreFoundation                      0x011e86e7 __CFRunLoopDoObservers + 295
        16  CoreFoundation                      0x011b11d7 __CFRunLoopRun + 1575
        17  CoreFoundation                      0x011b0840 CFRunLoopRunSpecific + 208
        18  CoreFoundation                      0x011b0761 CFRunLoopRunInMode + 97
        19  GraphicsServices                    0x01e501c4 GSEventRunModal + 217
        20  GraphicsServices                    0x01e50289 GSEventRun + 115
        21  UIKit                               0x004d2c93 UIApplicationMain + 1160
        22  twittertrends                       0x00002669 main + 121
        23  twittertrends                       0x000025e5 start + 53
    )





#import <Foundation/Foundation.h>
#import "Mapkit/Mapkit.h"


@interface AvailablePlaces : NSObject <MKAnnotation>{

    NSString *_name;
    NSString *_address;
    CLLocationCoordinate2D _coordinate;

}

@property (copy) NSString *name;
@property (copy) NSString *address;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate;

@end
<小时/>
#import "AvailablePlaces.h"


@implementation AvailablePlaces
@synthesize name = _name;
@synthesize address = _address;
@synthesize coordinate = _coordinate;

- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate {
    if ((self = [super init])) {
        self.name = [name copy];
        self.address = [address copy];
        _coordinate = coordinate;
    }
    return self;
}

- (NSString *)title {
    return _name;
}

- (NSString *)subtitle {
    return _address;
}

- (void)dealloc
{
    [_name release];
    _name = nil;
    [_address release];
    _address = nil;    
    [super dealloc];
}

@end

---viewcontroller.m-----

CLLocationCoordinate2D coordinate;
        coordinate.latitude = latitude.doubleValue;
        coordinate.longitude = longitude.doubleValue;            
        AvailablePlaces *annotation = [[[AvailablePlaces alloc] initWithName:name address:woeid coordinate:coordinate] autorelease];
        [_mapView addAnnotation:annotation];

-----main.m----------

#import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

最佳答案

很可能您在调用 initWithName:address:coordinate: 时将 NSNumber 实例作为 name 传递。因此,您需要注意您的 name 变量包含一个 NSString

关于iphone - 点击 MapKit 注释时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869009/

相关文章:

iphone - UICollectionView 图像之间的空间

iphone - UIImagePickerController 选择多个图像

android - $http 请求状态 0 和 https

ios - viewDidLoad 方法命名是否具有误导性?

swift - MapKit:检查用户是否在某个地址。 (在建筑物中)

swift - Core Graphics 替代 UIImage/NSImage 文件表示

iphone - 有没有一种方法可以在不必手动编写 setter 和 getter 的情况下对原子属性进行延迟初始化?

javascript - 将 HTML5 游戏制作为 Apple App Store 中的 iPhone/iPad 应用程序

ios - 如果同时开始动画,则 UIPageViewController 转换会出现错误

ios - SwiftUI Map 不以注释为中心