1

我是 Objective c 的完整初学者,我正在尝试完成“iOS 编程:大书呆子牧场指南”一书中的挑战。

我试图将一个名为item的对象(属于 BNRItem 类)放入一个名为subItems的 NSMutableArray 中,它是一个名为container的对象的一部分(属于 BNRContainer 类,是 BNRItem 的一个子类,并添加了 NSMutableArray 来保存 BNRItems)。BNRItem 工作正常。

代码如下:

BNRContainer.h

#import <Foundation/Foundation.h>
#import "BNRItem.h"

@interface BNRContainer : BNRItem
{
NSMutableArray *subItems;
}

BNRContainer.m

- (id)init
{
return [self initWithItemName:@"Container"
               valueInDollars:0
                 serialNumber:@""];
}

- (void)setSubItems:(BNRItem*)item
{
[subItems addObject:item];
}

主程序

#import <Foundation/Foundation.h>
#import "BNRItem.h"
#import "BNRContainer.h"

int main(int argc, const char * argv[])
{

@autoreleasepool {

    BNRItem *item = [[BNRItem alloc] init];

    BNRContainer *container = [[BNRContainer alloc] init];

    [container setSubItems:item]

    }

return 0;
}

[container setSubItems:item]行我收到错误:没有可见的 @interface for container 声明选择器 setSubItems

setter 方法 setSubItems 的代码不完整(尽管其他 setter 可以,并且工作正常)。

我做错了什么简单的事情吗?一个简单的解释将不胜感激!

4

2 回答 2

1

为了让 Xcode 为 subItems 生成 getter/setter,您必须在界面中实际声明它的属性。像这样的东西:

#import <Foundation/Foundation.h>
#import "BNRItem.h"

@interface BNRContainer : BNRItem
@property (strong, nonatomic) NSMutableArray *subItems;
@end

此外,您实际上并没有分配/初始化您的数组,并且 setSubItems: 的当前逻辑不会像听起来那样做。此函数会将作为参数传递的数组添加为子项中的对象。如果您尝试将数组中的项目添加到子项目,那么您应该使用:

[myMutableArray addObjectsFromArray:<#(NSArray *)#>];
于 2013-09-05T00:39:56.427 回答
1

更新 BNRContainer.h:

#import <Foundation/Foundation.h>
#import "BNRItem.h"

@interface BNRContainer : BNRItem
{
    NSMutableArray *subItems;
}
- (void)setSubItems:(BNRItem*)item;
@end

(不知道为什么弗雷德删除了他的答案。)

于 2013-09-05T01:11:58.997 回答