2010-10-18 2 views
2

У меня есть эта небольшая проблема, которую я не смог найти в Google: UITableView работает нормально, пока не начну прокрутку.- [NSCFString objectAtIndex:]: непризнанный селектор

Error Message: `-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5f24870 ` 

Метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *MyIdentifier = @"MyIdentifier";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];  
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; 
    } 
    // Set up the cell 
    int storyIndex = [indexPath indexAtPosition: [indexPath length]-1];  
    //populate cell 
    cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"]; 
    return cell;  
} 

Просто догадалась, что была «проблема» -метод ... если вам нужна более подробная информация: пожалуйста скажите мне :) спасибо за вашу помощь!

EDIT: туАггау просто нормальный NSArray *myArray Это упорядоченный массив ->

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

resultArray (NSMutableArray) является результатом XML-Parser .. надеюсь, что вы можете увидеть мою проблему ..

+1

как вы создаете MyArray объект? – Vladimir

+0

спасибо за комментарий .. см. Edit .. – dav3

ответ

11

It означает, что вы отправляете сообщение objectAtIndex: объекту типа NSString (или, возможно, CFString). Конечно, вы ожидаете, что myArray будет массивом, а не строкой.

Что, вероятно, произошло то, что ваш массив выпускается (почти наверняка autoreleased) слишком рано и что к тому времени, указанный выше способ называется память, была быть, на который указывает myArray теперь держит строку.

В ответ на ваши изменения ...

Эта линия:

myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

... неверен. Значение автореализовано. Вы должны сохранить его:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 

Не забудьте снять его, прежде чем закрыть вид!

+0

спасибо =) он работает сейчас ... сделал меня счастливым =) – dav3

0

Если вы правильно определили этот метод как преступник, я предполагаю, что это линия проблема:

cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"]; 

Мне кажется лайм myArray является примером NSCFString, а не NSArray. Вы должны начать с двойной проверки этого и что вы никогда не назначаете ничего, кроме экземпляров NSArray, до myArray.

--edit--

Попробуйте

self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

Это должно правильно сохранить массив для сравнению с предыдущим годом, чтобы убедиться, что он не мусора и заменить румяна строку :)

+0

спасибо большое, он работает сейчас, и я очень рад =) – dav3

0

myArray proberbly autoreleased. Используйте self.myArray для установки отсортированного массива.(С правильной @property (сохранить))

+0

спасибо, он работает =) Я счастлив =) – dav3

0

Если туАггау является переменной экземпляра, а не свойство, попробуйте:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 
Смежные вопросы