2011-09-22 28 views
2

我從蘋果引導了以下內容:靜態內容 - 與蘋果引導的問題

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7

有關:技術靜態行內容。

我的問題是這樣的:

我所有的細胞都nil

根據Apple的說法,視圖的加載應該實例化所有填充該nib文件的對象,只有實例化tableview的位。因此,當它返回一個空單元格時,單元格爲零,並在方法cellForRowAtIndexPath:中崩潰程序。

我已經按照字母指南搜索了所有內容,沒有找到任何解決方案,除了爲每個單元創建一個筆尖並在需要時加載這些筆尖,但該解決方案比Apple解決方案要少得多。

任何幫助,將不勝感激。

+0

請注意,從ios5 /故事板開始,您可以在故事板中就地定義靜態內容,而不是使用您鏈接到的技術。 – jrturton

回答

0

您可能沒有將單元格的IBOutlet綁定到單元格本身。如果你的單元ivars是nil,那麼你沒有連線。

EDIT

如果IBOutlets連接,但實例變量是零,則該IBOutlets沒有連接。還有其他可能性,但這是最常見的。其他可能性:您正嘗試訪問viewDidLoad之前。特別是,您在initWithFrame:期間無法訪問您的ivars。其他可能性是你在某個時候覆蓋了它們。檢查他們的值在viewDidLoad。其他可能性是您加載了錯誤的nib文件,或者根本沒有加載nib文件。所有的可能性,但我首先檢查在viewDidLoad的一切,並仔細檢查你的連接。

+0

IOButlet通過從文件所有者拖動到單元格連接到單元格。 這也是爲什麼我不知道爲什麼他們沒有實例化的原因。 文件的所有者是具有與單元相關的ivars的TableViewController類。 – Thomas

+0

謝謝你的時間Rob .. 我測試了你建議的東西,結果如下: IBOutlets已連接:請參閱File's Owner的連接圖像[File's Owner connections](http://dl.dropbox。 COM/U/2250562/connections.png)。 ivars在viewDidLoad中無效。 ivars在: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath。 我相信這個筆尖是加載的,因爲文件的所有者是控制該筆尖的TableViewController,而tableView不是零。我通過調試進行了檢查。 – Thomas

+0

ViewDidLoad不包含除[Super viewDidLoad]之外的其他任何內容,但也應該是可以的,因爲實例化是通過加載nib文件完成的。 – Thomas

0

當實例化你的表視圖控制器,你init方法,你應該調用父類([UIViewController initWithNibName:bundle:])的重載指定初始化,傳遞筆尖名稱:

- (id)init { 
    return [self initWithNibName:NSStringFromClass([self class]) bundle:[NSBundle mainBundle]]; 
    } 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 
     // Custom initialization here 
    } 
    return self; 
} 

有關詳細信息,請參閱本答案: Automatically Loading XIB for UITableViewController