I got a really interesting question.
Inside one of my classes I declared a very simple instance method -(NSDictionary)dictionary; that is implemented in this way:
- (NSDictionary *)dictionary {
return [NSDictionary dictionaryWithObjectsAndKeys:
self.userID, @"id",
self.userName, @"name",
self.userSurname, @"sName",
self.userNickname, @"nName",
self.userPassword, @"pwd",
[NSNumber numberWithDouble:[self.userBirthday timeIntervalSince1970] * 1000], @"birthday",
self.userSex, @"sex",
self.userEmail, @"email",
self.userLanguage, @"locale",
[NSNumber numberWithLongLong:self.userCoin], @"coin",
self.userRate, @"rate",
[NSNumber numberWithDouble:self.userCoordinate.latitude], @"lat",
[NSNumber numberWithDouble:self.userCoordinate.longitude], @"lon",
self.userPlaces, @"userPlaces",
nil];
}
with this method declared there are no @"userPlaces" key inside my return dictionary (self.userPlace is obviously valorized and full of objects).
So I chang开发者_如何学运维ed a little bit my method like this:
- (NSDictionary *)dictionary {
NSMutableDictionary *toReturn = [NSMutableDictionary dictionary];
[toReturn setValue:self.userID forKey:@"id"];
[toReturn setValue:self.userName forKey:@"name"];
[toReturn setValue:self.userSurname forKey:@"sName"];
[toReturn setValue:self.userNickname forKey:@"nName"];
[toReturn setValue:self.userPassword forKey:@"pwd"];
[toReturn setValue:[NSNumber numberWithDouble:[self.userBirthday timeIntervalSince1970] * 1000] forKey:@"birthday"];
[toReturn setValue:self.userSex forKey:@"sex"];
[toReturn setValue:self.userEmail forKey:@"email"];
[toReturn setValue:self.userLanguage forKey:@"locale"];
[toReturn setValue:[NSNumber numberWithLongLong:self.userCoin] forKey:@"coin"];
[toReturn setValue:self.userRate forKey:@"rate"];
[toReturn setValue:[NSNumber numberWithDouble:self.userCoordinate.latitude] forKey:@"lat"];
[toReturn setValue:[NSNumber numberWithDouble:self.userCoordinate.longitude] forKey:@"lon"];
[toReturn setValue:self.userPlaces forKey:@"userPlaces"];
return [NSDictionary dictionaryWithDictionary:toReturn];
}
All the key are now present inside the output dictionary!!!
This problem drove me crazy to understand but my question is ... There is any reason couse the second method works better then the first one??
I didn't find a reason for it.
[NSDictionary dictionaryWithObjectsAndKeys:
stops to add objects when it finds a nil
value.
So most likely one of the objects you try to add in the first code is nil.
The something similar to the code below solved my problem with the same exception:
(NSMutableDictionary *)dictionary {
return [NSMutableDictionary dictionaryWithObjectsAndKeys:
self.userID, @"id",
self.userName, @"name",
self.userSurname, @"sName",
self.userNickname, @"nName",
self.userPassword, @"pwd",
[NSNumber numberWithDouble:[self.userBirthday timeIntervalSince1970] * 1000], @"birthday",
self.userSex, @"sex",
self.userEmail, @"email",
self.userLanguage, @"locale",
[NSNumber numberWithLongLong:self.userCoin], @"coin",
self.userRate, @"rate",
[NSNumber numberWithDouble:self.userCoordinate.latitude], @"lat",
[NSNumber numberWithDouble:self.userCoordinate.longitude], @"lon",
self.userPlaces, @"userPlaces",
nil];
}
精彩评论