簡體   English   中英

[object]的可見@interface沒有聲明選擇器[method]

[英]No visible @interface for [object] declares the selector [method]

我是Objective c的一個完整的初學者,我正在嘗試完成“ iOS編程:大書呆子牧場指南”一書中的挑戰。

我正在嘗試將一個名為item的對象(屬於BNRItem類)放入一個稱為subItems的NSMutableArray中,該對象是一個稱為容器的對象的一部分(屬於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

設置方法setSubItems的代碼無法完成(盡管其他設置方法可以完成,並且可以正常工作)。

我是在做簡單的錯誤事情嗎? 一個簡單的解釋將不勝感激!

為了使Xcode生成子項的getter / setter,必須在接口中實際聲明其屬性。 像這樣:

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

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

此外,您實際上從未分配/初始化數組,並且setSubItems:的當前邏輯不會像聽起來那樣做。 此函數會將作為參數傳遞的數組添加為SubItems中的對象。 如果您試圖將數組中的項目添加到子項目中,那么您應該使用:

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

更新BNRContainer.h:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM