【发布时间】:2014-04-22 05:55:24
【问题描述】:
这是代码:
NSString *jsonString = @"[
{\"sn\": \"E\", \"t\": \"K\", \"d\": \"Tue 3-Mar\"},
{\"sn\": \"F\", \"t\": \"Y 1\", \"d\": \"Tue 3-Mar\"}
]";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *jsArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"jsArray: %@", jsArray);
for (id job in jsArray) {
NSLog(@"job: %@", job);
NSLog(@"%@", [job sn]);
}
在控制台中,我得到了这个:
2014-04-22 15:40:46.464 test[2442:60b] jsArray: (
{
d = "Tue 3-Mar";
sn = E;
t = K;
},
{
d = "Tue 3-Mar";
sn = F;
t = "Y 1";
}
)
2014-04-22 15:40:46.466 test[2442:60b] job: {
d = "Tue 3-Mar";
sn = E;
t = K;
}
-[__NSCFDictionary sn]: unrecognized selector sent to instance 0x8fa53b0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFDictionary sn]: unrecognized selector sent to instance 0x8fa53b0'
它似乎可以识别对象数组和单个对象。为什么反对sn这个属性?
【问题讨论】:
-
使用
[job valueforKey:@"sn"]或job[@"sn"] 代替[job sn] -
正如 rmaddy 指出的那样,
sn不是一种方法;相反,它是一把钥匙。此外,如果您知道在数组项迭代期间使用的是什么对象,请声明该对象,而不是id。它将在未来有所帮助。 -
Why does it object to the property sn因为sn不是属性。 -
谢谢大家。 @Chris - 我是一个改革 JavaScript 的人,在 JS 中你可以称之为
property:) 我应该使用key这个词,对吧? -
@Nick,我明白了。这有点令人困惑,因为属性也是 Objective-C 中的一个关键字。很高兴你解决了。
标签: ios cocoa-touch nsjsonserialization unrecognized-selector