2

我有最新的 xcode,即 xcode 4.6,并且有这个问题:

NSArray *array = @[@[@"a",@"b"]];
NSLog(@"%d", array[0].count);

在我运行它之前,xcode 告诉我“在 'id' 类型的对象上找不到属性 'count'”。


但是,如果我将其更改为

NSLog(@"%d", [array[0] count]);

然后,一切都很好。


所以我的问题是,为什么 obj-c 不能处理two_d_array[index].count

4

2 回答 2

3

查看NSArray. 没有count财产。事实上,对于 根本没有任何属性NSArray

当你对非属性方法使用属性语法时,如果你有一个特定类型的对象并且有一个同名的方法,编译器会处理它。但在这种情况下,您有一个id. 因此编译器无法安全地确定您访问属性的尝试count应该转换为对该count方法的调用。

于 2013-05-18T17:24:44.420 回答
0

您可以通过如下类型转换来解决此问题NSLog(@"%d", ((NSArray*)array[0]).count);:XCode 将允许您调用对象不会响应的方法,因为它认为您知道自己在做什么。但是,如果它找不到该属性,它将出错。

于 2013-05-18T17:28:05.080 回答