UITable cellForRowAtIndexPath

#iphone

#iPhone

Вопрос:

Новинка в iOS, вот вопрос:

Я использую xcode 4.0.2 iso-4.3.2 . Здесь у меня есть таблица, и я создаю один изменяемый массив, например

 mainarray=[[NSMutableArray alloc]initWithObjects:@"Hi",@"Hello"nil];
  

и отправляем это значение в.Метод делегирования таблицы, подобный

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

здесь приходит значение, но как только я динамически отправляю значение в mainarray, например

 mainarray=[[NSMutableArray alloc]initWithObjects:[dataarray valueForKey:@"first_name"],nil]; or
[mainarray addobject:[dataarray valueForKey:@"first_name"]]
  

и отправка этого значения mainarray в cell.textlabel.text затем моя программа завершается и отправляет это сообщение об ошибке.

 2011-05-11 10:29:10.346 picture:vide[742:207] -[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x4e85200
2011-05-11 10:29:10.348 picture:vide[742:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x4e85200'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00ddb5a9 __exceptionPreprocess   185
    1   libobjc.A.dylib                     0x00f2f313 objc_exception_throw   44
    2   CoreFoundation                      0x00ddd0bb -[NSObject(NSObject) doesNotRecognizeSelector:]   187
    3   CoreFoundation                      0x00d4c966 ___forwarding___   966
    4   CoreFoundation                      0x00d4c522 _CF_forwarding_prep_0   50
    5   UIKit                               0x003ecafc -[UILabel setText:]   72
    6   picture:vide                        0x000050c9 -[VideoChatController1 tableView:cellForRowAtIndexPath:]   376
    7   UIKit                               0x00340b98 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:]   634
    8   UIKit                               0x003364cc -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:]   75
    9   UIKit                               0x0034b8cc -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:]   1561
    10  UIKit                               0x0034390c -[UITableView layoutSubviews]   242
    11  QuartzCore                          0x01d7ba5a -[CALayer layoutSublayers]   181
    12  QuartzCore                          0x01d7dddc CALayerLayoutIfNeeded   220
    13  QuartzCore                          0x01d230b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE   310
    14  QuartzCore                          0x01d24294 _ZN2CA11Transaction6commitEv   292
    15  QuartzCore                          0x01d2446d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv   99
    16  CoreFoundation                      0x00dbc89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__   27
    17  CoreFoundation                      0x00d516e7 __CFRunLoopDoObservers   295
    18  CoreFoundation                      0x00d1a1d7 __CFRunLoopRun   1575
    19  CoreFoundation                      0x00d19840 CFRunLoopRunSpecific   208
    20  CoreFoundation                      0x00d19761 CFRunLoopRunInMode   97
    21  GraphicsServices                    0x017321c4 GSEventRunModal   217
    22  GraphicsServices                    0x01732289 GSEventRun   115
    23  UIKit                               0x002d9c93 UIApplicationMain   1160
    24  picture:vide                        0x00002910 main   102
    25  picture:vide                        0x000028a1 start   53
)
  

Пожалуйста, помогите.

Комментарии:

1. Пожалуйста, проверьте, что вы называете [dataarray valueForKey:@»first_name»] имя массива данных предполагает, что это массив, но я предполагаю, что это словарь. Соглашения об именовании существуют не просто так.

Ответ №1:

Здесь вы получаете этот завершающий журнал, потому что

dataArray — это NSArray, который вы не можете вызвать [dataarray valueForKey:@"first_name"] , потому что это не восстановлено для NSArray

позже вы можете использовать что-то вроде этого

 [[dataarray objectAtIndex:index] valueForKey:@"first_name"]
  

Комментарии:

1. он не говорит, что dataArray — это NSArray. Я думаю, это просто его неправильное название… Хороший момент, хотя, я думаю, он получил бы предупреждение, если бы это был массив

2. @7KV7 яп, он выдает предупреждение, но не выдает никаких ошибок, только такого рода журнал сбоев при запуске. Я часто сталкиваюсь с этой проблемой, когда забываю правильно обращаться к такого рода данным из массива

Ответ №2:

[__NSArrayI isEqualToString:]: проблема в том. Вы используете isEqualToString: где-то для массива. Проверьте это. Это метод NSString

Ответ №3:

Инициализация массива была неправильной.

Следующая строка

 mainarray=[[NSMutableArray alloc]initWithObjects:@"Hi",@"Hello"nil];
  

должно быть исправлено как

 mainarray=[[NSMutableArray alloc]initWithObjects:@"Hi",@"Hello" , nil];
  

Пожалуйста, обратите внимание на новую запятую между @»Hello» и нулем