2013-01-25 70 views
3

在ios應用程序中我有一個UITableView。在cellForRowAtIndexPath方法中,我需要使用它的NIB名稱返回一個自定義單元格。爲此我使用loadNibNamed。 (我將負荷後填入單元中的數據在「willDisplayCellforRowAtIndexPath」)UITableView從NIB文件加載自定義單元格拋出NSInternalInconsistencyException

MyItemCell是XIB文件(MyItemCell.xib),該方含2的UIImageView和一個UIButton(每一個項目都有一個標籤)

這是我的代碼:

在我的viewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return [ViewHelper loadCustomCellWithNibName:@"MyItemCell" owner:self]; 
} 

,並從NIB

+ (UITableViewCell *) loadCustomCellFromNib:(NSString *)nibName owner:(id)owner 
{ 
    UITableViewCell *cell = nil; 
    NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil]; 
    if([nibObjects count] > 0) 
    { 
     cell = [nibObjects objectAtIndex:0]; 
    } 
    else 
    { 
     NSLog(@"Failed to load %@ XIB file!", nibName); 
    } 
    return cell; 
} 
加載自定義單元格的方法

在所有的測試中一切正常。但是,我收到了一些我無法複製的用戶的崩潰。

這是崩潰:

NSInternalInconsistencyException 

Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/7A24cE79-131F-523F-4C00-23B523ARG123/MyApp.app> (loaded)' with name 'MyItemCell' 

堆棧跟蹤:

0 CoreFoundation      0x39b432a3 __exceptionPreprocess + 163 + 162 

1 libobjc.A.dylib      0x33a3297f objc_exception_throw + 31 + 30 

2 CoreFoundation      0x39b431c5 -[NSException initWithCoder:] + 1 

3 UIKit         0x32e12491 -[UINib instantiateWithOwner:options:] + 1637 + 1636 

4 UIKit         0x32e1a1d7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 139 + 138 

5 MyApp         0x00047ded +[ViewHelper loadCustomCellFromNib:owner:] (ViewHelper.m:349) 

6 MyApp         0x00034003 -[BuildViewController tableView:cellForRowAtIndexPath:] (BuildViewController.m:2432) 

7 UIKit         0x32cc0545 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 413 + 412 

8 UIKit         0x32ca530b -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1311 + 1310 

9 UIKit         0x32cbc7c7 -[UITableView layoutSubviews] + 207 + 206 

10 UIKit        0x32c78803 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 259 + 258 

的問題是,我沒能重現此崩潰。

任何想法可能導致崩潰?或者有什麼解決方案來避免這樣的錯誤?

非常感謝您的幫助

編輯:

只是爲了澄清更多的,這是工作完全正常的,我做任何測試。這個崩潰對於1位用戶來說只出現1次,所以問題不在代碼中。我只是在一個非常具體的情況下尋找可能導致這次崩潰的原因。由於

+0

要記住的重要一點是nibname和單元格標識符是不同的。名稱在身份檢查器中,標識符在屬性檢查器中 – noobsmcgoobs

回答

1

請試試這個...它不會給任何問題......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"albumListCell"; 
    albumListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = (albumListCell *) [[[NSBundle mainBundle] loadNibNamed:@"albumListCell" owner:self options:nil] lastObject]; 
    } 
    return cell; 
} 

與榫文件創建tableViewCell不是possible..So創建一個簡單的視圖控制器,然後更改的UIViewController來的UITableViewCell ...

12

要創建NIB文件自定義單元格試試這個

- (void)viewDidLoad 
{ 
    [tableView registerNib:[UINib nibWithNibName:CellIdentifier bundle:nil] forCellReuseIdentifier:CellIdentifier]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    ...... 
    return cell; 
} 

CellIdentifier是護理文件的名稱,也用作小區標識。