1

我正在使用 ItemController 来提供要在 tableview 中使用的项目列表。我似乎无法填充控制器,我不知道为什么。

这是控制器类的代码:

。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

项目.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];并将您的数组属性从 更改copyretain

我也相信你的课ItemController应该是善良的UIViewController而不是善良的NSObject

@interface ItemController : UIViewController

于 2013-01-30T11:49:27.720 回答
0

您不会在_items任何地方初始化实例变量,所以它总是nil. 任何调用的整数返回方法的结果都nil将为 0,因此您会看到计数为 0。

于 2013-01-30T11:06:05.900 回答