2012-03-10 62 views
0

我遇到了NSMutableArrayObject的addObject方法問題。以下是我現在使用的代碼:無法使用addObject方法添加到NSMutableArray

- (void)addBirdSightingWithName:(NSString *)name location:(NSString *)location { 
    BirdSighting *bird; 
    NSDate *today = [NSDate date]; 
    bird = [[BirdSighting alloc] initWithName:name location:location date:today]; 
    [self.masterBirdSightingList addObject:bird]; 
    NSLog(@"Elements: %d", [self.masterBirdSightingList count]); 
} 

運行此代碼時,該NSLog調用打印值0到控制檯。我不知道可能是什麼原因造成的。

編輯:

我特地深入到代碼中,我也發現,問題是,我BirdSightingDataController永遠不會初始化。現在我的問題是:我可以在哪裏放置我的BirdSightingDataController的init?在viewDidLoad

感謝大家的幫助。

+0

你似乎並沒有在任何地方創建'UITableViewCell's,只是將已存在的(如果有的話)出列,你怎麼知道它沒有被調用呢?函數的第一行和後結果。 – Alexander 2012-03-10 13:05:33

+0

這是一個cpoy&粘貼錯誤,或者你是否在'cellForRowAtIndexPath'之後省略':'?由於冒號是方法名稱的一部分,因此很重要。 – DarkDust 2012-03-10 13:15:07

+0

看看編輯。我的錯誤似乎在模型中。感謝您的所有意見 – 2012-03-10 13:23:37

回答

1

你有沒有alloc吃內存masterBirdSightingList

self.masterBirdSightingList = [[NSMutableArray alloc] init]; 
+0

是的,我確實分配了NSMutableArray – 2012-03-10 13:41:36

+0

,你完全確定分配調用是實際進行的,而且是在添加第一個元素之前完成的?而且,你有@合成了get/set函數嗎?或者現在可能會失敗,以便在自定義get/set方法中寫入或從變量中獲取值?嘗試在分配masterBirdSightingList時放置一個NSLog()。一切都指出,在您撥打[count]時它沒有被分配。 – 2012-03-10 13:46:15

+0

你是對的人。 BirdSightingDataController類的init永遠不會被調用。任何想法我可以在哪裏做到這一點?我認爲當方法被合成時控制器被自動調用。 – 2012-03-10 13:53:30

0

在幾乎所有情況下的cellForRowAtIndexPath:不叫是因爲numberOfRowsInSection:返回0

將日誌存在,並確保你返回一個以上的項目,你應該能夠看到你的細胞。如果您需要進一步的幫助,請張貼代碼在你:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
+0

實際上,返回nil的行指的是NSMutableArray。與UITableView無關。 @afruizc,請記住發送給nil的每條消息(在本例中,self.masterBirdSightingList = nil)將返回nil。 – 2012-03-10 13:39:50

+0

開放的問題改變了,所以現在我的答案不會匹配問題。 :0 – 2012-03-10 13:44:26

0

檢查您的財產訪問者。你確定它正在返回正確的對象嗎?確保屬性的名稱與實例變量相匹配,或者您已正確指定它(例如:@synthesize masterBirdSightingList = _masterBirdSightingList;。如果屬性訪問器與iVar不匹配,它將返回nil。當然,如果您手動實現如果你沒有,你也可以嘗試手動執行它以確保你可以嘗試手動實現它。

要做一個快速檢查,刪除self.masterBirdSightingList並用masterBirdSightingList(假設這是iVar名稱)來訪問直接看看會發生什麼