关于C#:为什么未设置我的数据源属性?

Why doesn't my datasource property get set?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
@interface FLWorkspaceViewController : UITableViewController

@property(nonatomic,retain) NSMutableArray* workspaces;

@end

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

1
2
3
4
5
6
7
for(NSDictionary* workspace in workspaces)
        {
            NSLog(@"%@",workspace);
            [workspaceViewController.workspaces addObject:workspace];
        }

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

我检查了这些值,它们是否存在。 当我在viewDidLoad中计算workspaces时,它是0。为什么?


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

编辑:初始化workspaces数组的最佳方法可能是在您定义@property的类中的getter方法中。 延迟初始化是可取的。 最好将您的@synthesize语句修改为类似于@synthesize workspaces = i_workspaces;的内容,然后可以这样编写getter:

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

容量声明仅有助于编译器优化,而不必一定是准确的。