我有一個錯誤,我想我在以下過程中做錯了什麼。首先,我有一個類隱形眼鏡:NSUserDefaults,NSCoder,自定義類 - iPhone應用程序問題
@interface Contact : NSObject<NSCoding> {
@private
ABRecordRef ref;
NSString *first;
NSString *last;
bool selected;
NSString *phoneNumber;
}
並接觸的實現,我有:
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:first forKey:@"First"];
[encoder encodeObject:last forKey:@"Last"];
[encoder encodeObject:[NSNumber numberWithInteger: ABRecordGetRecordID(ref)] forKey:@"Ref" ];
[encoder encodeObject:first forKey:@"PhoneNumber"];
}
- (id)initWithCoder:(NSCoder *)decoder {
self = [[Contact alloc] init];
first = [decoder decodeObjectForKey:@"First"];
last = [decoder decodeObjectForKey:@"Last"];
ABAddressBookRef addressBook = ABAddressBookCreate();
NSNumber *num = [decoder decodeObjectForKey:@"Ref"];
ref = ABAddressBookGetPersonWithRecordID(addressBook,(ABRecordID)num);
phoneNumber = [decoder decodeObjectForKey:@"PhoneNumber"];
return self;
}
當我創造什麼我在我的應用程序調用一個「組」,我做到以下幾點:
+ (void)addGroupWithName:(NSString *)s contacts:(NSMutableArray *)arr {
NSLog(@"added group name with name %@",s);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:s];
[defaults synchronize];
//[UserData setDefaultWithName:s object:arr];
}
其中,根據我製作的一些打印聲明,似乎工作正常。
然後,當應用程序啓動,我嘗試打印這些對象存儲我:
+ (void)printGroups {
NSMutableArray *arr = [UserData getGroupNames];
NSLog(@"group names are %@",arr);
for(int i = 0; i < [arr count]; i++) {
NSString *name = [arr objectAtIndex:i];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:name];
NSArray *a = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"name = %@",name);
NSLog(@"array count is %i",[a count]);
for(int i = 0; i < [a count]; i++) {
NSLog(@"on index %i",i);
Contact *c = [a objectAtIndex:i];
NSLog(@"got contact");
if(c == nil)
NSLog(@"it's nil!");
NSLog(@"class is %@", NSStringFromClass([c class]));
NSLog(@"got contact %@",c);
}
NSLog(@"array = %@",a);
}
}
然而,上線的NSLog(@ 「有聯繫%@」,C);,我的程序停止運行。它打印一切正常,甚至打印該對象的類是「聯繫」。但隨後停止。它看起來也許有一個錯誤,但在左側,我只看到在左邊的錯誤區域XCode 4中的「按線程」選項下的問號。
那麼我做錯了什麼?
查找NSZombie,它可以幫助你找到這些問題 – bshirley