为什么我的数据源属性没有设置?

时间:2012-06-10 08:33:12

标签: objective-c cocoa-touch properties

我有一个UITableView,其控制器如下所示:

@interface FLWorkspaceViewController : UITableViewController

@property(nonatomic,retain) NSMutableArray* workspaces;

@end

我尝试在另一个控制器中设置该数组:

for(NSDictionary* workspace in workspaces)
        {
            NSLog(@"%@",workspace);
            [workspaceViewController.workspaces addObject:workspace];
        }

        [self.navigationController pushViewController:workspaceViewController animated:YES];

我检查过这些值并且它们存在。当我在workspaces中计算viewDidLoad时,它为0.为什么会这样?

1 个答案:

答案 0 :(得分:2)

@property语句为您创建指针,但不是实际内容。由于我在您的代码中没有看到它:您alloc init某个地方是NSMutableArray *workspaces吗?

编辑:初始化workspaces数组的最佳方法可能是在定义@property的类中的getter方法。懒惰的初始化是可取的。最好修改你的@synthesize语句,阅读类似@synthesize workspaces = i_workspaces;的内容,然后你就可以这样编写你的getter:

- (NSMutableArray *)workspaces {
    if (i_workspaces == nil) {
        NSMutableArray *i_workspaces = [[NSMutableArray alloc] initWithCapacity:3];
    }
    return i_workspaces;
}

容量语句只是帮助编译器进行优化,但不一定非精确。