2013-05-08 2 views
0

Я создал пользовательский UITableViewController, Cell и Source в моем проекте. Контроллер и Ячейка были первоначально созданы как шаблон UIViewController для iPhone, так что я получил частичный класс в паре с XIB-файлом. У меня такая же настройка уже работает с другой таблицей, и я следил за тем же процессом (я думаю), чтобы создать это, поэтому я понятия не имею, почему я получаю эту ошибку.Пользовательский UITableViewCell, GetCell throws UnknownNSKeyException

Это мой GetCell в TableViewSource классе

public override UITableViewCell GetCell (UItableView tv, NSIndexPath path) 
{ 
    MyCell oCell; 
    NSArray oViews; 
    // 
    oCell = tv.DequeueReusableCell ("MyCell") as MyCell; 
    // 
    if (oCell == null) 
    { 
     oViews = NSBundle.MainBundle.LoadNib ("MyCell", tv, null); 
     oCell = Runtime.GetNSObject (oViews.ValueAt (0)) as MyCell; 
    } 
    // 
    oCell.UpdateWithData (MyDataCollection[path.Row]); 
    // 
    return oCell; 
} 

я получаю исключение на линии, где он пытается загрузить перо:

Objective-C исключении брошенного. Имя: NSUnknownKeyException Причина: [setValue: forUnidentifiedKey:]: этот класс равен , а не ключевому значению, кодируемому для ключевого lbl_address.

Я имею в виду, что это относится к проблеме в IB, где я создал интерфейс клеток, lbl_address является UILabel, что находится внутри UITableViewCell. Я пытаюсь поиграть с некоторыми вещами в IB, но это может быть довольно бесит, если вы не делаете это правильно в первый раз. Надеюсь, кто-то узнает эту ошибку и поставит меня прямо.

EDIT

В отсутствие найти ответ на это я решил, чтобы избежать нагрузки от кончика пера и сделали следующие изменения в мой код:

Новый Get Cell метод MyTableViewSource

public override UITableViewCell GetCell (UITableView tv, NSIndexPath path) 
{ 
    MyCell oCell; 
    // 
    oCell = tv.DequeueReusableCell ("MyCell") as MyCell; 
    // 
    if (oCell == null) 
     oCell = new MyCell ("MyCell"); 
    // 
    oCell.UpdateWithData (MyDataCollection[path.Row]); 
    // 
    return oCell; 
} 

Новый конструктор MyCell

public MyCell (string sIdentifier) 
    : base (UITableViewCellStyle.Default, sIdentifier) 
{ 
    // Set up the contents of the cell in the absence of loading from the nib 
    txt_name = new UILabel() 
    { 
     Font = UIFont.SystemFontOfSize (15), 
     TextColor = UIColor.LightGray 
    }; 
    img_profile = new UIImageView(); 
    // 
    // Make sure to add the controls to the content view! 
    ContentView.Add (txt_name); 
    ContentView.Add (img_profile); 
} 

Надеется, что это помогает кто-то там :)

ответ

0

Это, как правило, связанно с элементом, который был удален, но предыдущий выпускным патрубок в XIb все еще остается в силе.

Я бы попробовал следующие шаги.

Открыть xib. Щелкните правой кнопкой мыши по ячейке. Если вы видите желтое предупреждение рядом с этим именем, удалите его (кнопка x).

Дайте мне знать, если это исправить проблему.

+0

Извините за долгую задержку в ответе! После того, что вы сказали, я не мог найти никаких предупреждений в xib или других торговых точках. Я обнаружил, что в этом случае мне пришлось избегать загрузки из nib, просто создав конструктор для ячейки, которая использовала базовый конструктор 'UITableViewCell' (' UITableViewCellType', 'string'). –