1

次のエラーが表示されます。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'
*** First throw call stack:

エラーの原因となっているコードは次のとおりです。

NSDictionary *dict = nil;
    @synchronized(self) {
        dict = [pendingDictionarySaves objectForKey:file];
    }
    if (dict) return dict;

    @synchronized(self) {
        dict = [savedDictionaries objectForKey:file];
    }
    if (dict) return dict;

    NSData *plistData = [[NSFileManager defaultManager] contentsAtPath:file];

    NSError *error = nil;
    if ([[NSPropertyListSerialization class]
         respondsToSelector:@selector(propertyListWithData:options:format:error:)]) {
        return [NSPropertyListSerialization propertyListWithData:plistData
                                                         options:NSPropertyListImmutable
                                                          format:NULL
                                                           error:&error];
    }

基本的には、plistData が null であるためです。ファイルパスは次のとおりです。

/Users/aditya15417/Library/Application Support/iPhone Simulator/5.1/Applications/A355D003-668C-4B81-80DC-66C968FE57D3/Library/Caches/NewsfeedCache/?type=news

パスを初期化する方法は次のとおりです。

  NSString *path = [basePath stringByAppendingPathComponent:[streamURL uniqueFileName]];

    // Create the directories if needed
    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil];
    }

    return path;

問題は、pListData が null かどうかを確認することなく、どのように機能させることができるかということです。

4

1 に答える 1

0

+[NSData dataWithContentsOfFile:options:error:] を使用したほうがよいかもしれません。読み取りが失敗した場合、そのメソッドは少なくともエラーを返します。何かのようなもの:

NSError *error = nil;
NSData *plistData = [NSData dataWithContentsOfFile:file options:0 error:&error];
if(!plistData) {
    NSLog(@"failed to read data: %@",error);
    return nil;
}

if ([[NSPropertyListSerialization class]
     respondsToSelector:@selector(propertyListWithData:options:format:error:)]) {
    return [NSPropertyListSerialization propertyListWithData:plistData
                                                     options:NSPropertyListImmutable
                                                      format:NULL
                                                       error:&error];
}
于 2013-02-25T17:24:52.247 に答える