[object]没有可见的@interface声明了选择器[方法]

时间:2013-09-05 00:35:24

标签: ios objective-c

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

我正在尝试将名为 item (类BNRItem)的对象放入名为 subItems 的NSMutableArray中,该对象是名为容器<的对象的一部分/ strong>(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];
}

的main.m

#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没有声明选择器setSubItems

setter方法setSubItems编码不完整(虽然其他setter可以,并且工作正常)。

我做了一些简单的错误吗?一个简单的解释将非常感谢!

2 个答案:

答案 0 :(得分:1)

为了让Xcode为subItems生成getter / setter,你必须在接口中为它声明它的属性。像这样:

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

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

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

[myMutableArray addObjectsFromArray:<#(NSArray *)#>];

答案 1 :(得分:1)

更新BNRContainer.h:

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

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

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