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 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题