CellForeatindexpath: аварии при попытке доступа к массивам ObjectAtatIndex: IndexPath.ruw

StackOverflow https://stackoverflow.com/questions/2938104

  •  05-10-2019
  •  | 
  •  

Вопрос

Я загружаю данные в UITableView, от обычай UITableViewCell (собственный класс и ниб). Работает отлично, пока не пытаюсь получить доступ к objectAtIndex:indexPath.row для некоторых массивов.

Я сначала опубликую свой код, это, вероятно, будет легче понять, что я имею в виду тогда.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"CustomCell";
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil){
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        for (id currentObject in topLevelObjects){
            if ([currentObject isKindOfClass:[CustomCell class]]){
                cell = (CustomCell *) currentObject;
                break;
            }
        }
    }
    // Configure the cell...
    NSUInteger row = indexPath.row;
    cell.titleLabel.text = [postsArrayTitle objectAtIndex:indexPath.row];
    cell.dateLabel.text = [postsArrayDate objectAtIndex:indexPath.row];
    cell.cellImage.image = [UIImage imageWithContentsOfFile:[postsArrayImgSrc objectAtIndex:indexPath.row]];

    return cell;
}

Странно, это делает работу, когда она загружается в первые три ячейки (они высоки 130px), но сбиваются, когда я пытаюсь прокрутить вниз. (Aka, журнал показывает три числа до того, как он вылетает, 0, 1, 2)

Итак, как резюме, objectAtIndex:indexPath.row Проходит 3 * 3 раза успешно, но когда я пытаюсь прокрутить вниз в приложении, загрузка в новые ячейки, приложение сбивается со следующей ошибкой:

2010-05-30 14:00:43.122 app[2582:207] -[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5a44bf0
2010-05-30 14:00:43.124 app[2582:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5a44bf0'
// Stack
    0   CoreFoundation                   0x02398c99 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x024e65de objc_exception_throw + 47
    2   CoreFoundation                  0x0239a7ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                  0x0230a496 ___forwarding___ + 966
    4   CoreFoundation                  0x0230a052 _CF_forwarding_prep_0 + 50
    5   myappname                        0x00002ab1 -[HomeTableViewController tableView:cellForRowAtIndexPath:] + 605

Дополнительная информация о массивах:

Массивы созданы в .h файл:

NSArray *postsArrayDate;
NSArray *postsArrayTitle;
NSArray *postsArrayComments;
NSArray *postsArrayImgSrc;

И заполнен в viewDidLoad::

NSURL *urlPosts = [NSURL URLWithString:@"http://mysite/myphpfile.php?posts=2"]; //returns data in this format: DATA1#Data1.1#data1.2~DATA2#data2.1#~ and so on.
NSError *lookupError = nil;
NSString *data = [[NSString alloc] initWithContentsOfURL:urlPosts encoding:NSUTF8StringEncoding error:&lookupError];
postsData = [data componentsSeparatedByString:@"~"];
[data release], data = nil;
urlPosts = nil;
postsArrayDate = [[postsData objectAtIndex:2] componentsSeparatedByString:@"#"];
postsArrayTitle = [[postsData objectAtIndex:3] componentsSeparatedByString:@"#"];
postsArrayComments = [[postsData objectAtIndex:4] componentsSeparatedByString:@"#"];
postsArrayImgSrc = [[postsData objectAtIndex:5] componentsSeparatedByString:@"#"];

Как я могу исправить этот крах?

Это было полезно?

Решение

Фактическая ошибка это:

-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5d10c20

Другими словами, вы пытались запустить objectAtIndex: на NSString (NSCFString), что, конечно, не поддерживает этот метод.

Ты звонишь objectAtIndex: три раза в этих строках:

cell.titleLabel.text = [postsArrayTitle objectAtIndex:indexPath.row];
cell.dateLabel.text = [postsArrayDate objectAtIndex:indexPath.row];
cell.cellImage.image = [UIImage imageWithContentsOfFile:[postsArrayImg objectAtIndex:indexPath.row]];

Так что кажется, что postsArrayTitle, postsArrayDate, или postsArrayImg не ан NSArray, но Ан NSString.

Другие советы

** У меня была такая же проблема, обращаясь к «я». Массив исправил это. **


Nsarray только представлял единственный экземпляр «ObjectAtIndex: #», который в конечном итоге обрабатывался как нисстронг. При создании NSARRAY я создал Temparray, заполнил его объектами, настроил его равным MyArray, выпущенного Temparray. Но установить его равным «Myarray = Temparray»; не удалось. Требуется для решения объекта массива с "Self.myarray = temparray;" который работает на 100% !!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top