gpt4 book ai didi

iphone - -[__NSArrayI isEqualToString :]: message sent to deallocated instance

转载 作者:行者123 更新时间:2023-11-29 13:44:34 24 4
gpt4 key购买 nike

我已使用委托(delegate)将 NSArray 值传回父 View 。

在父 View 中是这样接收的

- (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.
}

如果我要执行此代码并选择 subview 的表格单元格,它显然会执行委托(delegate)但随后会卡住并将此错误触发到日志中

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

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

   - (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.
}

它没有崩溃,我最终在我的日志中得到了包含正确详细信息的 NSLog。

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 时,您将得到一个无法识别的选择器。

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

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

但通常你需要检查数组中是否有多个值,并决定你想要哪个,还要检查数组中是否没有值,并做一些正确的处理。

关于iphone - -[__NSArrayI isEqualToString :]: message sent to deallocated instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com