1

テーブルビューで使用するアイテムのリストを提供するために ItemController を使用しています。ただし、コントローラーにデータを入力できないようですが、その理由はわかりません。

コントローラー クラスのコードは次のとおりです。

.h

#import <Foundation/Foundation.h>

@class Item;

@interface ItemController : NSObject

@property (nonatomic, copy) NSMutableArray *items;

- (NSUInteger)countOfList;
- (Item*)objectInListAtIndex:(NSUInteger)theIndex;
- (void)addItem:(Item *)item;

@end

.m

#import "ItemController.h"
#import "Item.h"

@interface ItemController ()
@end

@implementation ItemController

- (NSUInteger)countOfList {
    return [self.items count];
}
- (Item *)objectInListAtIndex:(NSUInteger)theIndex {
    return [self.items objectAtIndex:theIndex];
}

- (void)addItem:(Item *)item {
    [self.items addObject:item];
}

@end

Item.m

@implementation Item

-(id)initWithName:(NSString *)name{
    self = [super init];
    if (self) {
        _name = name;
        return self;
    }
    return nil;
}

@end

次のコードを使用してリストを作成しています。

ItemController* controller = [[ItemController alloc] init];
for (NSString* key in raw_data) {
    NSLog(key); // This outputs the keys fine
    [controller addItem:[[Item alloc] initWithName:key]];
}
NSLog([NSString stringWithFormat:@"%d",[controller countOfList]]); // Always 0
4

3 に答える 3

2

init メソッドで配列を初期化する必要があります。

- (id)init {
    self = [super init];
    if (self) {
        self.items = [[NSMutableArray alloc] init];
    }
    return self;
}
于 2013-01-30T11:11:00.887 に答える
1

変数を初期化する必要がありますitems。init メソッドで を呼び出しself.items = [NSMutableArray new];、配列プロパティを からcopyに変更しますretain

ItemControllerまた、あなたのクラスは親切であるべきであり、ではUIViewControllerないと信じていますNSObject

@interface ItemController : UIViewController

于 2013-01-30T11:49:27.720 に答える
0

_itemsインスタンス変数はどこにも初期化しないので、常にnilです。で呼び出された整数を返すメソッドの結果はnil0になるため、カウントが0であることがわかります。

于 2013-01-30T11:06:05.900 に答える