繁体   English   中英

客观的c接口访问

[英]objective c interface access

这是我在ah文件中的第一个界面。

@interface EventRow : NSObject 
{
NSString *title;
NSString *photo;
NSString *description;

NSMutableArray *photoArray;
}
@property (nonatomic , retain) NSString *title;
@property (nonatomic , retain) NSString *photo;
@property (nonatomic , retain) NSString *description;

@property (nonatomic , retain) NSMutableArray *photoArray;

@end

在同一文件中第二

@interface PhotoRow : NSObject
{
//NSString *image;

NSMutableArray *imageArray;
}
@property (nonatomic , retain) NSMutableArray *imageArray;

@end

现在,每个具有填充数组(图像数组)的“ PhotoRow”对象都存储到EventRow对象的“ photoArray”数组中。

现在,我要计算“ imageArray”的总数。 但是在通过EventRow的对象访问它时遇到了问题。

有什么建议么 ?

谢谢..

如果我理解正确的话,你的photoArray在变量EventRow类包含PhotoRow对象。 您可以像这样在PhotoRowimageArray变量中计算对象:

int someIndex = 0;
[((PhotoRow*)[myEventRow.photoArray objectAtIndex:someIndex]).imageArray count];

要访问photoArray中的单个对象(eventRow是EventRow的一个实例

[[eventRow photoArray] objectAtIndex: someIndex]; // I don't like dot notation!

要么

[eventRow.photoArray objectAtIndex: someIndex];

访问imageArray

[[[eventRow photoArray] objectAtIndex: someIndex] imageArray];

要么

[eventRow.photoArray objectAtIndex: someIndex].imageArray;

获取该imageArray的图像计数

[[[[eventRow photoArray] objectAtIndex: someIndex] imageArray] count];

要么

[eventRow.photoArray objectAtIndex: someIndex].imageArray.count;

如果要计算所有图像,则需要循环,但可以使用快速枚举来简化操作

size_t total = 0;
for (PhotoRow* photoRow in  [eventRow photoArray])
{
    total += [[photoRow imageArray] count];
}

但是,我希望您重新考虑一下您的设计。 在每个类中对NSMutableArray的公开都破坏了封装。 一旦调用者获得了数组,它就可以在对象不知道的情况下修改PhotoRow或EventRow的内部状态。 最好不要具有NSMutableArray属性,而要添加方法分别将图像和photoRows直接分别添加到PhotoRows和EventRows。 因此,例如,您的photoRow类可能具有以下方法:

-(size_t) imageCount; // returns the result of sending -count to the internal array
-(NSImage*) imageAtIndex: (size_t) index; // returns the result of sending -objectAtIndex: to the underlying array
-(void) addImage: (NSImage*) newImage;
// etc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM