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

时间:2012-01-15 10:31:04

标签: iphone ios mapkit mkannotation sigabrt

我正在开发应用程序以虚拟化推特趋势。我获取了地点的位置并为每个地点创建了注释。不幸的是,当我点击注释时,应用程序崩溃并在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;
}

1 个答案:

答案 0 :(得分:2)

您最有可能在NSNumber的通话中将name的实例作为initWithName:address:coordinate:传递。因此,您需要注意,name变量包含NSString