1

私は Objective C の完全な初心者であり、書籍「iOS プログラミング: The big Nerd Ranch guide」の課題を完了しようとしています。

(BNRItem クラスの) item というオブジェクトを、BNRItems を保持するための NSMutableArray を追加した BNRItem のサブクラスである BNRContainer クラスの、container と呼ばれるオブジェクトの一部である subItems というNSMutableArrayに入れようとします。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]行でエラーが発生します: No visible @interface for container declares the selector setSubItems

セッター メソッド setSubItems のコードは完全ではありません (ただし、他のセッターはコードを作成して正常に動作します)。

私は何か単純な間違いをしていますか?簡単な説明は大歓迎です!

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: の現在のロジックは、それが行うように聞こえることを行いません。この関数は、パラメーターとして渡された配列を SubItems 内のオブジェクトとして追加します。配列からサブアイテムにアイテムを追加しようとしている場合は、次を使用する必要があります。

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