0

viewDidLoadイベントでiPhoneプロジェクトに問題があり、アプリがクラッシュします

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) 

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

4

2 に答える 2

0

NSKeyedArchiverは、保存したオブジェクトを返します。例えば。配列を保存している場合は、配列を返します。したがって、オブジェクトをアーカイブ解除するときは注意してください。

次の例では、NSKeyedUnarchiverから配列を読み取りました。

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
于 2013-03-26T04:17:43.200 に答える
-1

クラッシュログのスタックトレースを調べて、この呼び出しが正確に発生している場所を確認します。

-rowを送信する変数が実際にNSArrayとして入力されていない場合は、その変数のメモリ管理ルールに従わなかった可能性があります。これらの同じ症状は、非常に一般的にそれによって引き起こされます。-rowに応答するものが、ある時点で存在し、それを保持しなかったために割り当てが解除された可能性があります。その後、NSArrayがその場所に割り当てられました。

「ビルドと分析」を実行し、睡眠中にそれらがわかるまで、メモリ管理ガイドラインを再確認します。

ソース:[NSCFArray行]:認識されないセレクターがインスタンス0x3953a20に送信されました

于 2013-03-26T04:10:01.683 に答える