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

时间:2011-05-04 21:42:46

标签: objective-c cocoa-touch ios uitableview

我有一个自定义对象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

我的根视图控制器实现cellForRowAtIndexPath:并从NSArray Spaces抓取:

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

这很好用,我可以点击进入详细视图并返回列表,但是在桌面视图和详细视图之间来回点击5-6之后,我在[[cell spaceName] setText:aSpace.spaceName];收到错误

  

' - [__ NSCFSet spaceName]:无法识别的选择器发送到实例0x6047b90'“

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

更新:

我仍然遇到同样的错误,但我已将其缩小到这个:

- 我在didSelectRowAtIndexPath上创建一个详细视图控制器... - 细节视图被推送到viewcontroller并显示正常,我也添加了一个后退按钮。 - 详细信息视图在计时器上加载信息和刷新 - 按后退按钮返回到表格列表视图

这是问题,我的详细信息视图没有从内存中释放,因此我在视图之间来回移动的时间越多,同时关闭的计时器就越多。我添加了一个检查viewWillDisappear,通过设置bool值来停止计时器。

我注意到细节视图没有卸载......

来自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];

    }
}

如何强制从内存中释放详细信息视图?

谢谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

也许您的aSpace = [spaces objectAtIndex:[indexPath row]]; 没有返回Space对象。也许在您尝试使用它之前,您需要进行测试以确保使用if ([aSpace class] == [Spaces class])

之类的内容