错误:无法识别的选择发送到实例

问题描述:

我有一个自定义对象,Spaces错误:无法识别的选择发送到实例

#import "Spaces.h" 


@implementation Spaces 

@synthesize spaceName; 
@synthesize spaceUsers; 
@synthesize spaceIcon; 
@synthesize spaceID; 

@synthesize imageURLString; 


- (void)dealloc 
{ 
    [spaceName release]; 
    [spaceUsers release]; 
    [spaceIcon release]; 

    [imageURLString release]; 

    [super dealloc]; 
} 

@end 

我的根视图控制器实现了从SpacesNSArray一个cellForRowAtIndexPath:和抓斗:

[[cell spaceName] setText:aSpace.spaceName]; 
    [[cell spaceChatType] setText:@"People"]; 
    [[cell spaceActiveUsers] setText:aSpace.spaceUsers]; 

这工作正常我可以点击进入详细视图并返回列表,但在表格视图和详细视图之间可能有5-6次点击之后,我在[[cell spaceName] setText:aSpace.spaceName];处得到一个错误,它是

'-[__NSCFSet spaceName]: unrecognized selector sent to instance 0x6047b90'"

请帮忙!任何见解将非常感激!

UPDATE:

我仍然得到同样的错误,但我已经将范围缩小到这一点:

- 我创建一个细节视图控制器didSelectRowAtIndexPath方法... -The细节视图被推送到视图控制器并显示正常,我也添加了一个后退按钮。 -The详细视图加载信息,并刷新上-Pressing后退按钮计时器 追溯到表列表视图

这是我的详细视图不被从内存中释放,因此我越来回走的问题在观点之间,更多的定时器同时发生。我添加了一个检查viewWillDisappear通过设置一个布尔值停止计时器。

我注意到详细视图不卸载...

从RootViewController的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //no longer on initial view 
    isinit = NO; 

    //hide keyboard 
    [spacesSearch resignFirstResponder]; 

    if (spaces != nil && spaces.count > 0) 
    { 
     //set back button reference 
     UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Spaces" style:UIBarButtonItemStylePlain target:self action:@selector(returnSpacesList:)]; 
     self.navigationItem.backBarButtonItem = backButton; 

     [backButton release]; 

     DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 

     //Grab Data from selected Space object and pass to DetailViewController 
     Spaces *aSpace = nil; 
     if (tableView == self.searchDisplayController.searchResultsTableView) 
     { 
      if ([self.filteredListContent count] == 0) 
      { 
       //self.lastSearchText 
       NSLog(@"Create new space code!"); 
      } 
      else 
      { 
       aSpace = [self.filteredListContent objectAtIndex:indexPath.row]; 
      } 
     } 
     else 
     { 
      aSpace = [spaces objectAtIndex:[indexPath row]]; 
     } 

     //set title and display 
     self.navigationController.title = [NSString stringWithFormat:@"/%@/",aSpace.spaceName]; 

     //pass data 
     [details passedValue:aSpace.spaceID :aSpace.spaceName]; 

     [self.navigationController pushViewController:details animated:YES]; 

     [aSpace release]; 
     [details release]; 

    } 
} 

我怎么能强制从内存中释放的详细视图?

谢谢

+1

你可以显示你的cellForRow ...方法的其余部分吗?它看起来像你的单元格超出了范围,现在指针指向的内存不是你的单元格(在你的示例错误中指向一个__NSCFSet)。 – RickDT 2011-05-04 21:48:24

+0

您可能需要发布一些更多的代码才能获得很好的帮助。对我来说,看起来你可能有内存泄漏,并且你的一些对象已经被释放,但是很难从给出的信息中说出来。 – uvesten 2011-05-04 22:23:53

听起来像[cell spaceName]已被autoReleased。我看不出你是如何定义的,但看看你的代码的那一部分。
如果您需要更多帮助,则需要提供更多代码。

+0

内存泄漏导致autorelease,详细视图deloc在返回表视图时未被调用,因为我未能释放一些数组变量,因此仍然在使用中。 – 2011-05-12 20:08:16

也许你aSpace = [spaces objectAtIndex:[indexPath row]]; 没有返回一个空间物体。也许在你尝试和使用它之前,你需要测试一下,以确定是否有类似if ([aSpace class] == [Spaces class])