为什么我不能用控件填充我的控制器?

时间:2013-01-30 11:01:44

标签: objective-c

我正在使用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

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

3 个答案:

答案 0 :(得分:2)

您需要在init方法中初始化数组。

- (id)init {
    self = [super init];
    if (self) {
        self.items = [[NSMutableArray alloc] init];
    }
    return self;
}

答案 1 :(得分:1)

您需要初始化变量items。在init方法中,调用self.items = [NSMutableArray new];并将数组属性从copy更改为retain

我还认为您的班级ItemController应该是UIViewController而不是NSObject

@interface ItemController : UIViewController

答案 2 :(得分:0)

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