访问数组中对象的属性

时间:2011-02-24 21:59:07

标签: iphone objective-c

我有一个对象数组,我可以将它们打印出来,所以我知道它们存在。

我遇到的问题是我无法访问对象的变量。

e.g。

// This prints out correctly
NSLog(@"asset frame in select mode is at index:%d is %@", i, [[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i]);

此打印件

  

选择模式下的资产框架是索引:0是   资产:0x8087040; frame =(4 2; 75 75); layer = CALayer:0x808bd00>>

我有资产的成员变量如下

UIImageView *overlayView;
BOOL selected;
id parent;

问题是我无法访问这些例如overlayView使用

[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i].overlayView.hidden = TRUE;

我如何访问这些成员?打印输出似乎表明该数组拥有资产。

3 个答案:

答案 0 :(得分:7)

在使用其属性之前,将对象强制转换或赋值给变量:

Foo *foo = [myArray objectAtIndex:12345];
foo.bar = 67890;

或者:

((Foo *)[myArray objectAtIndex:12345]).bar = 67890;

只有当编译器知道对象的类型时,属性才可用。

答案 1 :(得分:1)

你说你“无法访问这些” - 问题是什么?这是编译器错误吗?什么错误?

假设您的错误是我认为的错误:

NSArray(以及类似的类,如NSDictionary)保存对象 - NSObject。因此,在将它们作为该类型访问之前,必须将它们转换为实际类型。

尝试以下方法:

Asset *asset = (Asset*)[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i];
asset.overlayView.hidden = TRUE;

答案 2 :(得分:1)

您是否需要先将数组项目转换为资产?

((Asset*)[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i]).overlayView.hidden = TRUE;