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:方法格式作为指针,而不是格式的地址。
- 在多台设备上使用iCloud的EXC_BAD_ACCESS
- 收到信号SIGSTOP保存到iCloud
- 保存NSArray到iCloud并检索它
- html input type = file – 从iCloud中select一个文件
- 应用程序是否要求使用iCloud使用权限?
- 如何通过iCloud同步钥匙串
- 使用UIDocumentPickerViewController,可以像在Slack中一样打开默认服务(Dropbox,Google Drive等)吗?
- 未收到Mac上自定义logging区域的CloudKit推送通知
- NSUbiquityIdentityDidChangeNotification和SIGKILL