我想保存NSUserDefualts中繼承MKAnnotation類的對象。它在iOS 6中工作正常,但在iOS7中崩潰。下面是節約代碼:NSUserDefaults setobject方法崩潰
ParkHereAnnotation = [[catAnnotation alloc] initWithCoordinate:workingCoordinate];
ParkHereAnnotation.title = @"Your Parked Here" ;
ParkHereAnnotation.subtitle = @"";
//ParkHereAnnotation.annotationType = location;
ParkHereAnnotation.parkId = [[NSString alloc] initWithString:@"-1"];
[ParkHereAnnotation setAnnotationType:location];
[userDefaults setObject:ParkHereAnnotation forKey:@"ParkingAnnotation"];//Crashing here in iOS7 but not in iOS6.
類: 頭
頭文件
@interface catAnnotation : NSObject <MKAnnotation>
{
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
NSString *parkId;
enum MapAnnotationType annotationType;
}
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, assign) enum MapAnnotationType annotationType;
@property (nonatomic,retain) NSString *parkId;
@end
實施
@implementation catAnnotation
@synthesize coordinate;
@synthesize title;
@synthesize subtitle;
@synthesize annotationType;
@synthesize parkId;
-(id) init
{
return self;
}
-(id) initWithCoordinate:(CLLocationCoordinate2D)inCoord
{
coordinate = inCoord;
return self;
}
@end
設置之前類的對象是:
崩潰:由於未捕獲的異常 'NSInvalidArgumentException',原因 *終止應用程序: '* - [NSUserDefaults的的setObject:forKey:]:嘗試插入非財產清單對象鍵ParkingAnnotation' ***第一擲調用堆棧: (0x31576e8b 0x3b8716c7 0x31576dcd 0x31ea7c21 0x126613 0x12708f 0x126f45 0x33d3155f 0x33d314fb 0x33d314cb 0x33d1d0f3 0x33d398cd 0x33d30b0d 0x33d2bc09 0x33d00f59 0x33cff747 0x31541f27 0x315413ef 0x3153fbdf 0x314aa541 0x314aa323 0x361e12eb 0x33d611e5 0xf811d 0x3bd6aab7) 的libC++ abi.dylib:與類型的未捕獲的異常終止NSException
要清楚的是,在iOS 6中,你也不能。不同之處在於iOS 6默默無法保存您的數據,而iOS 7讓您知道。 –