我是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可以,并且工作正常)。
我做了一些简单的错误吗?一个简单的解释将非常感谢!
答案 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为什么弗雷德删除了他的答案。)