UIDocument loadFromContents失败,EXC_BAD_ACCESS

我有一个非常简单的IOS应用程序使用iCloud文档存储。 一切正常,然后在某些时候,我开始在至less一个iCloud文档的文档加载方法中遇到EXC_BAD_ACCESS错误,虽然大多数文件加载得很好。

- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError { file = (NSFileWrapper*) contents; NSFileWrapper *infoFile = [[file fileWrappers] objectForKey:InfoFile]; NSData *infoData = [infoFile regularFileContents]; if(nil != infoData) { NSPropertyListFormat format = NSPropertyListBinaryFormat_v1_0; NSError *propertyListError; // EXC_BAD_ACCESS occurs here NSDictionary *dictionary = [NSPropertyListSerialization propertyListWithData:infoData options:NSPropertyListImmutable format:&format error:&propertyListError]; if(nil == propertyListError) { _name = [dictionary objectForKey:@"name"]; _date = [dictionary objectForKey:@"date"]; _index = [dictionary objectForKey:@"index"]; _paperSize = [GritzPaperSizeEnum enumWithType:[dictionary objectForKey:@"paperSize"]]; TFLog(@"loading doc %@", _name); _pages = [[NSMutableArray alloc] init]; for (NSString *key in file.fileWrappers) { NSFileWrapper *subDir = [[file fileWrappers] objectForKey:key]; if(subDir.isDirectory) { GritzPage *page = [[GritzPage alloc] initFromFile:subDir]; [_pages addObject:page]; } } _currentPage = [_pages objectAtIndex:0]; return YES; } } return NO; } 

在这里输入图像说明

我希望我能“抓住”并处理不好的数据,并忽略损坏的文件; 但我似乎无法弄清楚如何。 EXC_BAD_ACCESS错误导致应用程序崩溃。

我应该做什么不同的事情,以提前确定数据或文件将会失败并跳过(或删除)。

validation它是一个NSFileWrapper使用isKindOfClass,否则视为一个奇怪的(也看看给定的typeName :))


使用@try {..} @catch结构来捕获任何exception不会在这种情况下工作,虽然因为你导致BAD_ACCESS这是一个UNIX信号

NSPropertyListFormatvariables格式应该被声明为point。 我想你应该调用propertyListWithData:方法格式作为指针,而不是格式的地址。