2010-10-18 72 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;  
} 

就猜到這是「問題」 - 方法......如果你需要更多的相關信息:請告訴我:) 感謝您的幫助!

編輯: myArray的僅僅是正常NSArray *myArray 這是一個排序的數組 - >

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

resultArray(NSMutableArray的)是一個XML解析器的結果..希望你能看到我的問題..

+1

如何創建myArray的對象? – Vladimir 2010-10-18 14:56:38

+0

感謝您的意見..見編輯.. – dav3 2010-10-18 15:08:51

回答

11

它取代意味着您正在向NSString類型的對象(或可能是CFString)發送objectAtIndex:消息。當然你期望myArray是一個數組而不是一個字符串。

什麼可能的情況是,你的陣列被釋放(幾乎可以肯定,自動釋放)太早,到時候上面的方法調用時正指向由myArray現在擁有一個字符串內存。

在回答您的編輯...

這條線:

myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

...不正確。該值是自動發佈的。您需要保留它:

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

記得在關閉視圖之前釋放它!

+0

謝謝你=)它現在有效...讓我開心=) – dav3 2010-10-18 19:49:20

0

如果你已經正確識別這種方法,我猜這條線的罪魁禍首是這個問題:

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

對我來說,它看起來像石灰myArrayNSCFString的一個實例,而不是NSArray。您應該首先仔細檢查一下,並且您從未將除NSArray實例之外的任何內容分配給myArray

- 編輯 -

嘗試

self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

這應該正確地保留陣列同比,以確保它不是垃圾收集,並與胭脂串:)

+0

非常感謝,它現在的作品,我非常高興=) – dav3 2010-10-18 15:19:37

0

myArray proberbly autoreleased。使用self.myArray設置排序後的數組。(用正確的@property(保留))

+0

謝謝你,它的作品=)我很開心=) – dav3 2010-10-18 15:20:02

0

如果myArray的是一個實例變量,而不是一個屬性,嘗試:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 
相關問題