ksc*_*ins 26 xcode objective-c nsdictionary ios
以下是我的.h文件:
NSDictionary *originalValues;
@property (nonatomic, retain) NSDictionary *originalValues;
Run Code Online (Sandbox Code Playgroud)
这是用于初始化NSDictionary的.m文件.
@synthesize originalValues;
- (void)viewDidLoad {
// copy original values when view loaded
originalValues = [[NSDictionary alloc] initWithObjectsAndKeys:place.city, @"city", place.cuisine, @"cuisine",
place.latitude, @"latitude", place.longitude, @"longitude", place.name, @"name", place.rating,
@"rating", place.state, @"state", place.street, @"street", place.telephone, @"telephone",
place.timesVisited, @"times visited", place.uppercaseFirstLetterOfName, @"first letter",
place.website, @"website", place.zipcode, @"zipcode", nil];
}
Run Code Online (Sandbox Code Playgroud)
问题是只有前四个对象和键被添加.之后,它们不会被添加到以place.name,@"name"开头的字典中.我在整个字典上做了一个NSLog,输出的唯一的东西是我提到的前四个值,然后我在place.name上做了一个NSLog,它输出一个值,所以我知道也应输出这个键/值对.这里有什么我想念的吗?我很好奇为什么所有的值都没有最初添加到NSDictionary中?
Mac*_*tle 63
如果其中一个对象是nil,如果使用新的文字语法初始化NSDictionary(下面),则可以更快地捕获.这种语法不仅更短,而且更健壮:如果您的某个对象实际上是在运行时出错nil,而不是静默地继续执行不完整的数据.
originalValues = @{ @"city" : place.city,
@"latitude" : place.latitude,
// etc.
};
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 48
它们没有被添加的原因是因为一个对象是nil,它标志着字典的结尾.您需要确保每个对象都不是nil,如果是,您可以使用它来[NSNull null]代替它.还self.originalValues = ...用于正确的内存管理.只要确保使用字典检查/可以处理NSNull值.
示例使用gnu ternary extension:
self.originalValues = [[NSDictionary alloc] initWithObjectsAndKeys:
place.city ?: [NSNull null], @"city",
place.cuisine ?: [NSNull null], @"cuisine",
place.latitude ?: [NSNull null], @"latitude",
place.longitude ?: [NSNull null], @"longitude",
place.name ?: [NSNull null], @"name",
place.rating ?: [NSNull null], @"rating",
place.state ?: [NSNull null], @"state",
place.street ?: [NSNull null], @"street",
place.telephone ?: [NSNull null], @"telephone",
place.timesVisited ?: [NSNull null], @"times visited",
place.uppercaseFirstLetterOfName ?: [NSNull null], @"first letter",
place.website ?: [NSNull null], @"website",
place.zipcode ?: [NSNull null], @"zipcode",
nil];
Run Code Online (Sandbox Code Playgroud)
为了避免任何字典中的意外零,最好的解决方案是如果你使用文字和三元运算符组合这两个技术
self.originalValues = @{ @"city" : (place.city ?: @"city"),
@"latitude" : (place.latitude ?: [NSNull null]),
// etc.
};
Run Code Online (Sandbox Code Playgroud)
注意:
(anyValueOrVariable?:@"anyOtherValueOrVariable")
是缩写,与...相同
(anyValueOrVariable!= 0)?anyValueOrVariable:@"anyOtherValueOrVariable"
| 归档时间: |
|
| 查看次数: |
63828 次 |
| 最近记录: |