2012-06-10 79 views
0

我有一個UITableView,其控制器看起來是這樣的:爲什麼我的datasource屬性沒有設置?

@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]; 

我檢查的價值和它們的存在。當我在viewDidLoad中統計workspaces時,結果爲0.爲什麼這是?

+0

確保您已將內存分配給您的工作區數組... –

+0

請檢查workspaceViewController&workspaceViewController.workspaces是不是無 –

+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; 
} 

容量聲明只是幫助編譯器優化,它並不一定準確。

+0

你的意思是我的NSMutableArray正確嗎?我不會在任何地方分配init。我應該做viewDidLoad嗎? –

+0

也許最可靠的解決方案是在FLWorkspaceViewController中編寫一個懶惰的初始化getter。我會稍後修改我的答案...... – Stefan

相關問題