J'ai une erreur et je suppose que je fais quelque chose de mal dans le processus suivant. Tout d'abord, j'ai une classe Contacts:NSUserDefaults, NSCoder, Custom Class - Application iPhone question
@interface Contact : NSObject<NSCoding> {
@private
ABRecordRef ref;
NSString *first;
NSString *last;
bool selected;
NSString *phoneNumber;
}
Et dans la mise en œuvre de contact, je:
- (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;
}
Et quand je crée ce que j'appelle un « groupe » dans mon application, je fais ce qui suit: Ce qui, selon certaines déclarations d'impression, semble fonctionner correctement.
Ensuite, lorsque l'application lance, je tente d'imprimer ces objets que je stockés:
+ (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);
}
}
Cependant, sur la ligne NSLog (@ "a obtenu le contact% @", c) ;, arrête mon programme en cours d'exécution . Il imprime tout bien, et imprime même que la classe de l'objet est "Contact". Mais alors ça s'arrête. Il semble qu'il y ait peut-être une erreur mais sur le côté gauche je vois juste des points d'interrogation sous l'option "By Thread" dans XCode 4 dans la zone d'erreur sur la gauche.
Alors qu'est-ce que je fais mal?
chercher NSZombie, il peut vous aider à trouver ces problèmes – bshirley