gpt4 book ai didi

ios - 发送到不可变对象(immutable对象)的变异方法

转载 作者:行者123 更新时间:2023-11-28 22:12:48 25 4
gpt4 key购买 nike

有人能告诉我为什么在第一次(或有时是第 5 次通过)此代码有效。但是,我随机出现崩溃并显示以下消息:

__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

代码如下:

if (![self.recentSearchesArray containsObject:self.filterParameters[@"includedKeywords"]]){

[self.recentSearchesArray addObject:[self.filterParameters [@"includedKeywords"] mutableCopy]];
[[NSUserDefaults standardUserDefaults]setObject:[self.recentSearchesArray mutableCopy] forKey:@"RecentSearches"];
[self.SavedSearchesTableView reloadData];
}

最近的搜索数组是一个声明为 @property(strong, nonotomic)NSMutableArray *recentSearchesArray

的 NSMutableArray

当我向数组添加一个对象时它崩溃了。

编辑

我最近的搜索数组是这样分配的:

if (!self.recentSearchesArray){
self.recentSearchesArray = [NSMutableArray array];
}

我的过滤参数字典是这样分配的:

    self.filterParameters = [NSMutableDictionary dictionaryWithDictionary:params];

params 是一个像这样分配的 NSDictionary:

NSDictionary *params = [NSDictionary dictionaryWithObject:self.searchTerm forKey:@"includedKeywords"];

解决方案

根据标记的答案 - NSUserDefaults 是问题所在:

self.recentSearchesArray = [[NSUserDefaults standardUserDefaults]objectForKey:@"RecentSearches"];

这返回了一个 NSArray 而不是 NSMutableArray。我从没想过 NSUserDefaults 会出现这种情况。

这是返回可变副本的正确方法

    self.recentSearchesArray = [[[NSUserDefaults standardUserDefaults]objectForKey:@"RecentSearches"] mutableCopy];

最佳答案

检查您设置 recentSearchArray 变量的位置。也许您将其设置为 NSArray 的对象。还要检查从 NSUserDefaults 获取此数组的代码,因为 NSUserDefaults 将返回 class NSArray 的对象。

关于ios - 发送到不可变对象(immutable对象)的变异方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22499083/

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