2015-07-10 145 views
0

我一直有這個問題了很多,其中表視圖要麼不第一次加載單元格或顯示臨時標籤。在這兩種情況下,當第二次加載表時(通過另一個按鈕,我強制它重新加載或轉到應用程序中的前一個視圖並返回到表),所有內容都按照預期顯示。UITableView無法正確加載

Im使用[table reloadData]重新加載viewDidAppear:方法中的表格,因爲它在viewDidAppear:方法中不起作用,而在另一種情況下,我將其置於按鈕操作中。

我還使用此方法來設置,我已放置在故事板的小區的標籤:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    static NSString *cellIdentifier = @"Cell"; 
    UITableViewCell *cell = [contactsTableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    UILabel *label = (UILabel *)[cell viewWithTag:1001]; 
    label.text = [Array3 objectAtIndex:indexPath.row]; 

    return cell; 
} 

EDIT

我聲明執行像下面的數組: 的NSMutableArray * ARRAY3; 之後,在ViewDidLoad方法中,我聲明瞭該數組的其餘部分: Array3 = [NSMutableArray arrayWithObjects:nil]; 然後我通過調用ViewDidLoad方法中的函數來加載數組中的元素,以使用元素填充數組。

編輯2 顯示更多的我怎樣填充陣列 - (無效)viewDidLoad中{

[super viewDidLoad]; 
Array3 = [NSMutableArray arrayWithObjects: nil]; 
[self loadArray]; 

} 
- (void) loadArray 
//populate array in here. 
// I use the add object method 
// [Array3 addobject:object]; 
{ 
+0

你在哪裏加載/定義/填入Array3?您的描述告訴我,數據源在異步時被填充,並且在您首次顯示視圖控制器時未準備好。 –

+0

我在.m文件中的實現下定義它。你知道我可以怎樣修復它嗎? – Nil2k15

+0

沒有辦法告訴你,因爲你沒有顯示它。 :-)該數組如何獲取元素? –

回答

1
  1. 好消息先:您的方法cellForRowAtIndexPath是正確的。

  2. -viewDidAppear:-viewWillAppear都沒有必要調用reloadData。如果您在修改Array3內容的同時覆蓋您的視圖(這是一種特殊情況),則此說法可能不適用。

這不是你定義方法的地方,而是你調用它的地方。合理的地方來填充ARRAY3的內容是

required init(coder aDecoder: NSCoder!) 

override func viewDidLoad() 

陷阱

此外,你需要你的所有委託方法(numberOfSectionsInTableViewnumberOfRowsInSectioncellForRowAtIndexPath)根據你的數組返回一致的值。一個簡單的技術是使用陣列中的條目數來驅動numberOfRowsInSection

何時使用reloadData?

的典型用途reloadData如下:

- (void)loadArray { 
    //populate array in here. 
    ... 
    [self.tableview reloadData]; // Possibly postpone to main thread 
} 
+0

你可以擴展「必需的init(編碼器a解碼器:NSCoder!)嗎?」我從來沒有見過這個(我使用Obj-C) – Nil2k15

+0

對不起,我試圖填充我的數組在 - (void)loadView方法,但我不能讓它工作。現在,當我將代碼放入該方法而不是ViewDidLoad時,該表甚至沒有顯示出來。在ViewDidLoad裏面還有什麼我應該做的嗎? – Nil2k15

+0

謝謝!這幫助了我很多,因爲我已經解決了我的問題 – Nil2k15

0

我認爲Array3是nil當第一負載。

+0

是的,它最初設置爲零,但在設置數組後立即用ViewDidLoad方法中的對象填充它。我編輯了我的帖子以反映這個 – Nil2k15

0

提供獨特的,例如,你可以

NSString *cellIdentifier =[NSString stringWithFormate:@"%d",indexPath.row];

也許這會幫助你的小區標識...

0

我相信在你最初設定的Array3你必須分配這個變量到內存,然後在不同的函數中使用,如tableView:cellForIndexPath:

因此而不是Array3 = [NSMutableArray arrayWithObjects: nil];你會使用Array3 = [[NSMutableArray alloc] init];

既然你把它當作在這行代碼空數組,你不會用[[NSMutableArray alloc] initWithObjects: nil];,因爲它是字面上相同的交易