vikeyToy 2013-05-30 08:10 采纳率: 0%
浏览 1281

使用Persistence的viewDidLoad

在viewDidLoad事件中应用在这行崩溃:

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

想要实现存储一些信息:

- (void)viewDidLoad{
    NSString *filePath = [self dataFilePath];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
        for (int i = 0; i < 2; i++) {
            UITextField *theField = self.lineFields[i];
            theField.text = array[i];
        }
        NSData *data = [[NSMutableData alloc]
                        initWithContentsOfFile:filePath];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
                                         initForReadingWithData:data];
        BIDThreeLines *threelines = [unarchiver decodeObjectForKey:kRootKey];
        [unarchiver finishDecoding];

        for (int i = 0; i < 2; i++) {
            UITextField *theField = self.lineFields[i];
            theField.text = threelines.lines[i];
        }
    }

    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(applicationWillResignActive:)
     name:UIApplicationWillResignActiveNotification
     object:app];
}

错误:

2013-03-25 23:29:45.592 MobilePaymentsApp[1182:c07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x8d0e8d0
2013-03-25 23:29:45.593 MobilePaymentsApp[1182:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x8d0e8d0'
*** First throw call stack:
(0x1c96012 0x10d3e7e 0x1d214bd 0x1c85bbc 0x1c8594e 0x1c0ae18 0xb030e8 0x339c 0xf91c7 0xf9232 0x483d5 0x4876f 0x48905 0x51917 0x2cc5 0x15157 0x15747 0x1694b 0x27cb5 0x28beb 0x1a698 0x1bf1df9 0x1bf1ad0 0x1c0bbf5 0x1c0b962 0x1c3cbb6 0x1c3bf44 0x1c3be1b 0x1617a 0x17ffc 0x29fd 0x2925)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

链接:https://github.com/a-elnajjar/MobilePaymentsApp

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-24 18:37
    关注

    看起来你在尝试使用NSKeyedUnarchiver解码一个对象,但是在调用decodeObjectForKey:方法时传入了一个数组(array),而不是一个字典。NSKeyedUnarchiver的decodeObjectForKey:方法是用来从一个字典(dictionary)中解码对象的,它接受一个字符串作为参数,这个字符串对应于字典中的键。你需要检查你的代码,确保你在调用decodeObjectForKey:时传入的是一个字典,而不是一个数组。


    除此之外,你还可能想检查一下你是否在正确地使用NSKeyedUnarchiver。你可能需要使用initWithData:方法来初始化一个NSKeyedUnarchiver对象,然后使用decodeObjectOfClass:forKey:方法来解码对象。例如:

    NSData *data = [[NSMutableData alloc] initWithContentsOfFile:filePath];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initWithData:data];
    BIDThreeLines *threelines = [unarchiver decodeObjectOfClass:[BIDThreeLines class] forKey:kRootKey];
    [unarchiver finishDecoding];
    

    你还可能需要检查一下你是否在正确地处理异常情况,比如文件不存在、解码失败等情况。

    评论

报告相同问题?

悬赏问题

  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?