2012-02-04 115 views
3

在iOS5中,在故事板採用ARC和原型細胞的tableView,我可以代替下面的代碼:dequeueReusableCellWithIdentifier是否適用於ARC?

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView 
    dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] 
     initWithStyle:UITableViewCellStyleDefault 
     reuseIdentifier:CellIdentifier]; 
} 

// Configure the cell... 
return cell; 

有了這個簡單的代碼?:

UITableViewCell *cell = [tableView 
    dequeueReusableCellWithIdentifier:@"Cell"]; 
return cell; 

我看到了這此鏈接:

http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

提前致謝!

+0

是的,你可以。另外,它不需要ARC。只要您使用iOS 5和故事板,就可以使用新模式。 – 2012-02-04 17:31:02

+0

@JasonCoco:這應該是一個答案,而不是評論。 – 2012-02-04 17:33:04

+0

@JasonCoco我不明白爲什麼,但這件事對我來說不起作用。我不斷收到一個「無」單元格。我創建了一個新的主 - 細節項目。這個例子很好用。當我添加cellForRowIndexPath方法和表大小方法並將大小設置爲2時,我得到一個異常,因爲dequeueReusableCellWithIdentifier一直讓我「無」。 – ericyue 2012-02-04 17:43:20

回答

2

發生此問題是因爲您未從故事板創建MenuViewController。你是這樣創造的:

MenuViewController *menuViewController = [[MenuViewController alloc] init]; 

那的MenuViewController實例未連接到故事板,因此它不知道原型細胞中的故事板。

您需要進入故事板並將MenuViewController的標識符設置爲menuViewController之類的內容。然後,你可以這樣創建一個實例:

MenuViewController *menuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"menuViewController"]; 
+0

謝謝!它的工作原理:)有沒有什麼辦法來創建MenuViewController從故事板直接? – ericyue 2012-02-05 03:03:00

+0

從「MenuButtonPressed:'方法中斷開書籤按鈕(在時間軸導航欄中)。按住Control鍵從書籤按鈕拖動到故事板中的MenuViewController實例,然後選擇Push或Modal作爲segue類型。 – 2012-02-05 06:06:27

0

我的解決辦法最終是這樣的:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier 
                  forIndexPath:indexPath]; 

cell = [cell initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 

因爲形式的iOS 5.0開始的第一行代碼永遠不會產生一個零值,我看到沒有其他的方式來指定我想要的風格。或者,我可以從庫中添加一個Table View Controller的實例,然後我可以在原型單元格中編輯樣式。

+1

不,這是低效率的,並且表明對細胞類如何與標識符關聯的誤解。如果出列方法沒有返回'nil',那是因爲您(a)已經將一個故事板單元原型與該標識符相關聯; (b)你使用了'registerClass:forCellReuseIdentifier:';或者(c)你以前做過'initWithStyle:reusedIdentifier:',並且它已經成功地取出了單元格。現在,您通常會使用選項(a),並修改故事板,以使單元格原型具有適當的樣式。然後你會消除你的第二行代碼。 – Rob 2014-08-29 10:51:45

+0

謝謝Rob。我的代碼是case(b),我找不到設置單元格樣式的方法。 – 2014-08-30 08:41:52

+0

如果你使用了'registerClass',你的子類應該實現'initWithStyle',它調用'[super initWithStyle:...]',但明確指定適當的樣式,而不是僅僅傳遞提供的'UITableViewCellStyle'。但是,上面的代碼示例是不可取的,因爲它會導致'initWithStyle'被調用兩次(因爲如果沒有可用的單元可用於重用,則dequeueReusableCellWithIdentifier將自動調用initWithStyle)。 – Rob 2014-08-30 20:31:08