– :发送到解除分配的实例的消息

我已使用委托将NSArray值传递回父视图。

它是在父视图中接收的

- (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath { manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); manufactureResultIndexPath = myIndexPath; [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. } 

如果我要执行此代码并选择子视图的表格单元格,它显然执行委托,但随后冻结并将此错误激发到日志

 2011-10-31 14:06:16.670 code[12610:207] ( "Alfa Romeo" ) 2011-10-31 14:06:16.673 code[12610:207] *** -[__NSArrayI isEqualToString:]: message sent to deallocated instance 0x6859280 

但是,如果我在委托方法中注释掉以下行

  - (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath { //manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); manufactureResultIndexPath = myIndexPath; [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. } 

它没有崩溃,我最终在我的日志中使用了正确的详细信息。

 2011-10-31 14:09:28.200 code[12737:207] ( Sony ) 

我希望有人之前遇到过这样的问题,这就是我的数组对象的样子,它是一个值的字典。

 ISELECT = F; ISALIVE = T; MANUFACTURER = Sony; MANUFACTURERID = 3; 

valueForKey:返回一个自动释放的实例。 除非您保留它,否则在从当前方法返回后,您可以预期它将被释放。 看起来您正在将其分配给实例变量。 如果你这样做,你需要保留它。

 manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; [manufactureSearchObjectString retain]; 

但看起来你还有另外一个问题。

 [arrayValues valueForKey:@"MANUFACTURER"]; 

返回一个数组。

 manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; 

通过变量的名称,看起来好像是将它分配给字符串变量。 因此,如果您修复了保留问题,那么您将遇到另一个错误。 当您尝试在其上调用isEqualToString时,您将获得一个无法识别的选择器。

您需要为manufacturingSearchObjectString分配一个字符串值。 你需要弄清楚你想要的字符串值。 在这种情况下,你的数组中只有一个字符串,所以我猜你想要那个。 在这种情况下

 manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] objectAtIndex:0]; [manufactureSearchObjectString retain]; 

但一般来说,你需要检查数组中是否有多个值,并确定你想要哪一个,并检查数组中是否没有值,并做一些正确的事情来处理它。

尝试将代码更改为:

 - (void) setManufactureSearchFields:(NSDictionary *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath { manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] copy]; NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); manufactureResultIndexPath = myIndexPath; [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. } 

请注意,我还将arrayValues的变量类型arrayValuesNSDictionary 。 如果这对您有用,请告诉我。

请将其转换为NSString。

  NSString *manufact=[NSString stringWithFormat:@"%@",[arrayValues valueForKey:@"MANUFACTURER"]; 

它不会崩溃。