2012-12-11 96 views
1

我已經在頭文件中聲明瞭一個屬性NSMutableArray。然後我分配,在viewDidLoad方法中初始化它。但是當我嘗試在一個不同的方法中向數組添加一個對象時,它會一直返回(null)。我在做一些明顯的錯誤嗎?請詢問你是否想看更多的代碼。NSMutableArray不斷返回空

.H

@property (strong, nonatomic) NSMutableArray *myList; 

的.m

- (void)viewDidLoad 
{ 
    self.dataController = [[DataController alloc]init]; 

    self.myList = [[NSMutableArray alloc] init]; 

    [super viewDidLoad]; 
} 

[...]

NSDictionary *myObject = [self.dataController.objectList objectAtIndex:r]; 
[[cell textLabel]setText:[myObject objectForKey:@"title"]]; 

[self.myList addObject:myObject]; 

NSLog(@"myList %@",self.myList); 
NSLog(@"myObject %@",myObject); 

myObject的但self.myList保持返回(空)的輸出打印。感謝所有幫助!

編輯:修正了,謝謝你的回答!

+3

您確定視圖在您嘗試訪問列表時已加載嗎?也許你應該在'init'中初始化這些屬性。 –

+0

應用程序中的哪個位置是您創建myObject的代碼,將它添加到myList並執行日誌? – rdelmar

+0

@KevinBallard第三個代碼片段中的代碼在tableView:cellForRowAtIndexPath中,所以我猜問題是這個方法在viewDidLoad之前加載。但是,在登錄tableView:cellForRowAtIndexPath之前,viewDidLoad中的日誌會返回。我試圖將代碼從viewDidLoad移動到(id)初始化,但從來沒有得到它的工作。 – Emil

回答

1

不確定你在哪裏使用這個數組。如果你要使用這個數組viewDidLoad被調用之前,你可以由於您使用[cell textLabel]我假設你在表視圖代表一個這樣做的,

NSDictionary *myObject = [self.dataController.objectList objectAtIndex:r]; 
[[cell textLabel]setText:[myObject objectForKey:@"title"]]; 

if (!self.myList) 
    self.myList = [[NSMutableArray alloc] init];//for the first time, this will initialize 

[self.myList addObject:myObject]; 

。在這種情況下,檢查你是否在課堂上設置self.myList = nil;

+0

它比viewDidLoad更晚使用 - 否則他的代碼不會打印myObject。或者會嗎? –

+1

@ Daij-Djan,不能從'myObject'預測。可能是因爲他正在從前一個類本身設置'dataController',並且在執行此操作時不調用'dataController'的初始化部分。但我認爲你是正確的,因爲'cell textLabel'應該在'cellForRowAtIndexpath'中完成。這應該在'viewDidLoad'後面調用。但無論如何他必須在他的問題中增加更多信息。 – iDev

+0

我的想法是,他簡單地初始化了'init'中的'myObject',但沒有意識到/沒有提及它。 – borrrden

0

在您發佈的代碼中,我看不到任何錯誤。 設置一個斷點並查看是否首先調用初始化數組的代碼。

0

我敢打賭,當NSLogs執行時,viewDidLoad還沒有被調用。

爲確保數組已初始化,請嘗試將初始化放入init方法中。

+0

我還沒有任何init方法。當我嘗試添加一個它不會執行。 – Emil