Iphone 使用持久性加载viewDidLoad

Iphone 使用持久性加载viewDidLoad,iphone,ios,objective-c,Iphone,Ios,Objective C,我的Iphone项目在viewDidLoad事件中出现问题,应用程序在该事件中崩溃 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 我正在尝试存储文本文件中的信息。有人能帮我解决这个问题吗 - (void)viewDidLoad{ NSString *filePath = [self dataFilePath]; if ([[NSFileManage

我的Iphone项目在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];
}
Error 
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) 
-(void)viewDidLoad{
NSString*filePath=[self-dataFilePath];
if([[NSFileManager defaultManager]fileExistsAtPath:filePath]){
NSArray*数组=[[NSArray alloc]initWithContentsOfFile:filePath];
对于(int i=0;i<2;i++){
UITextField*theField=self.lineFields[i];
theField.text=数组[i];
}
NSData*data=[[NSMutableData alloc]
initWithContentsOfFile:filePath];

NSKeyedUnarchiver*unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data]; BIDThreeLines*threelines=[unarchiver decodeObjectForKey:kRootKey]; [未归档完成解码]; 对于(int i=0;i<2;i++){ UITextField*theField=self.lineFields[i]; theField.text=三行。行[i]; } } UIApplication*app=[UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(applicationWillResignActive:) 名称:UIApplicationWillResignActiveNotification 对象:应用程序]; } 错误 2013-03-25 23:29:45.592 MobilePaymentsApp[1182:c07]-[\uu\nsFarray objectForKey:]:发送到实例0x8d0e8d0的无法识别的选择器 2013-03-25 23:29:45.593 MobilePaymentsApp[1182:c07]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFArray objectForKey:::]:未识别的选择器发送到实例0x8d0e8d0' ***第一次抛出调用堆栈: (0x1c96012 0x10d3e7e 0x1d214bd 0x1c85bbc 0x1c8594e 0x1c0ae18 0xb030e8 0x339c 0xf91c7 0xf9232 0x483d5 0x4876f 0x48905 0x51917 0x2cc5 0x15157 0x15747 0x1694b 0x27cb5 0x28beb 0x1a698 0x1BF1BF9 0x1BFAD0 0x1c0bbf5 0x1c0b962 0x1c3cbb6 0x1C3B44 0x1C3BE3BE1617A 0x17ffc 0x29fd 0x2925) libc++abi.dylib:terminate调用引发异常 (lldb)

查看崩溃日志的堆栈跟踪,查看此调用的确切位置 正在发生

如果要将-row发送到的变量实际上不是作为 NSArray,很可能你没能记住 该变量的管理规则。这些同样的症状非常严重 通常是由这一点引起的。对-row做出响应的东西可能有 曾经存在过,因为你没有保留它而被取消分配, 后来在那个地方分配了一个NSArray

运行“构建和分析”,并重新检查内存管理 指导原则,直到你在睡梦中知道它们


来源:

NSKeyedArchiver返回存储在其中的对象。如果您存储了一个数组,那么它将返回一个数组。因此,在解开对象时要小心

在下面的示例中,我从NSKeyedUnarchiver读取了一个数组

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];

哪些行抛出错误,请使用断点NSKeyedUnarchiver*unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:data]进行检查@AnoopVaidya你能看到链接吗?我在别的地方读到了这些答案,肯定不是你写的:D@AnoopVaidya-那么你的问题是什么??这里的主要问题是,要解决OP的问题,有一个标志叫做重复答案。如果这是标记,你发现这样做相当定期,你可能有麻烦。如果你认为这已经得到了回答,他们只需投票通过链接就可以了。这不是一件坏事,得到的想法,形成您的新答案与一些更多的补充。不要受伤,但要看到积极的一面。@iPatel每当你引用某人的话时,一定要把那篇文章标记为引用——剽窃者将受到严厉的惩罚@微:和