iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS – 从NSUserDefaults获取NSDictionary:尝试取消引用无效的ObjC对象或向其发送无法识别的选择器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试从已保存的NSUserDefaults中检索NSMutableArray.

我存储NSMutableArray:

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* mySavedTremps = [[defaults objectForKey:UD_MY_TREMPS] mutableCopy];

if (!mySavedTremps)
        mySavedTremps =[[NSMutableArray alloc] init];

NSMutableDictionary* trempDict = NSMutableDictionary* trempDict = [NSMutableDictionary DictionaryWithObjectsAndKeys:@"please",@"Help",@"me" @"!",nil]
[trempDict SETVALue:trempId forKey:@"trempId"];
[mySavedTremps insertObject:trempDict aTindex:0];
[defaults setObject:mySavedTremps forKey:UD_MY_TREMPS];

[defaults synchronize];

并尝试检索NSMutableArray:

NSMutableArray* myTrempsArray = [NSMutableArray arrayWithArray:[defaults objectForKey:UD_MY_TREMPS]];

for (TremP* tremp in myTrempsArray) {        
        if([tremp.trempId isEqualToString:@"1234"]) {
            [myTrempsArray removeObject:tremp];
            break;
        }
    }

但是,当我访问tremp(for循环中的param)时:

tremp.trempId

我收到此错误

error: Execution was interrupted,reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized SELEctor.

该过程已返回到表达式评估之前的状态.

解决方法

将Tremp对象保存为认值时,实际上将其保存为字典.

但是当你读出它时,你的代码假定你有一组Tremp对象.

你想要的东西:

for (NSDictionary *trempDict in myTrempsArray) {
    Tremp *tremp = ... // add code here to create a Tremp from the Dictionary
    if([tremp.trempId isEqualToString:@"1234"]) {
        [myTrempsArray removeObject:tremp];
        break;
    }
}

便说一句 – 这段代码会崩溃.您无法修改快速枚举的数组.将循环更改为循环的标准,但反过来循环.

此外,在保存数据时,将对SETVALue:forKey:的调用替换为setObject:forKey:.

大佬总结

以上是大佬教程为你收集整理的iOS – 从NSUserDefaults获取NSDictionary:尝试取消引用无效的ObjC对象或向其发送无法识别的选择器全部内容,希望文章能够帮你解决iOS – 从NSUserDefaults获取NSDictionary:尝试取消引用无效的ObjC对象或向其发送无法识别的选择器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。