代码之家  ›  专栏  ›  技术社区  ›  awsome

-[UITableViewRowdata IsEqualToString:]:无法识别的选择器发送到实例0x391dce0

  •  1
  • awsome  · 技术社区  · 14 年前

    我有一个显示联系人列表的数据表。当我启动应用程序时,所有数据都已正确加载。但在选择联系人后,有时会出现以下异常:

    Program received signal: “EXC_BAD_ACCESS”. 有时

    -[UITableViewRowData isEqualToString:]: unrecognized selector sent to instance 0x391dce0

    最可能的情况是:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil) {
    
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
    }
    ExpenseTrackerAppDelegate *appDelegate = (ExpenseTrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
    

    person*person=(person*)[appdelegate.expensive persons列表objecttinex:indexpath.row];

    nsstring*name=[nsstring stringwithformat:@“%@%@”,person.lastname,person.firstname];

    cell.textLabel.text=名称; 返回细胞; }

    如果我替换这些代码行

    NSString *name = [NSString stringWithFormat:@"%@ %@" ,person.lastName , person.firstName]; cell.textLabel.text = name;

    用这个代码 cell.textLabel.text = person.lastName;

    那一切都好吗?

    我不知道到底发生了什么? 在到处查找和调试之后,我发现这个代码似乎不起作用。 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // RootViewController *detailViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];
     PersonnalDetails *detailViewController = [[PersonnalDetails alloc] initWithNibName:@"PersonnalDetails" bundle:[NSBundle mainBundle]];
    //detailViewController.view = [[UITableView alloc] initWithNibName:@"PersonnalDetails" bundle:[NSBundle mainBundle]];
     // ...
     // Pass the selected object to the new view controller.
        ExpenseTrackerAppDelegate *appDelegate = (ExpenseTrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSInteger row = indexPath.row;
    Person *person = [[appDelegate expensivePersonsList] objectAtIndex:row];
    NSLog(@"%@", person.firstName);
      detailViewController.selectedPerson = person;
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
    

    } 这条线 NSLog(@"%@", person.firstName); 掷出不好的球。 我调试了代码和列表 appDelegate expensivePersonsList 包含对象。有人能告诉我可能的原因吗?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Glenn Howes    14 年前

    我认为您希望为“objc_exception_throw”放入一个符号断点,这样您就可以看到崩溃之前发生了什么。只需转到“运行”菜单->管理断点->添加符号断点,然后键入objc_exception_throw。

    顺便说一句,您可能正在调用一个已经被删除的对象。

        2
  •  0
  •   Brian    14 年前

    exc-bad-access上的调用堆栈是什么?

    另外,您可以只使用nsstring来获取格式化的字符串,不需要使用nsmutablestring或强制转换它…

        3
  •  0
  •   Community dbr    7 年前

    最后,我发现了这个问题。实际上,我想做的是将Person对象的所有属性设置为只读,这样只有在init方法中,属性才会被初始化。所以那个人。h看起来像:

    @interface Person : NSObject {  
            NSInteger  pid;  
            NSString const *firstName;  
            NSString const *lastName;  
            NSString const *phoneNumber;  
            NSString const *emailAddress;  
    }  
    
    @property (readonly) NSString *firstName;  
    @property (readonly) NSString *lastName;  
    @property (readonly) NSString *phoneNumber;  
    @property (readonly) NSString *emailAddress;  
    @property (readonly) NSInteger pid;    
    
    -(id)initWithName:(NSString *)n lastName:(NSString *)l phoneNumber:(NSString *)p emailAddress:(NSString *)e pid:(NSInteger)i;  
    @end  
    

    所有这些值都没有保留这些值。

    这个问题是我所有错误的主要问题: Initializing a readonly property