- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在制作一个文本编辑器应用程序,它将其每个文档存储为 NSFileWrapper 目录,文档文本和文档标题作为目录中的单独文件。我希望 loadFromContents: (id) contents
的 contents
部分是 NSFileWrapper,但事实并非如此。我的代码如下(它属于 UIDocument 的子类):
// loads document data to application data model
- (BOOL) loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
// from the contents, extract it so that we have the properties initialized
self.fileWrapper = (NSFileWrapper *) contents;
NSLog(@"%@", [contents class]); //** returns NSConcreteData
// get the fileWrapper's children
NSDictionary *contentsOfFileWrapper = [contents fileWrappers];
// assign things to the document!
// can also be done lazily through getters
self.text = [contentsOfFileWrapper objectForKey:TEXT_KEY];
self.title = [contentsOfFileWrapper objectForKey:TITLE_KEY];
if ([self.delegate respondsToSelector:@selector(noteDocumentContentsUpdated:)]){
[self.delegate noteDocumentContentsUpdated:self];
}
return YES;
}
当我试图调用这个方法时,我得到了这个错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteData fileWrappers]: unrecognized selector sent to instance 0x9367150'
下面是我的 contentsForType:
函数,如果有帮助的话:
- (id) contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
if (!self.fileWrapper) {
self.fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
}
NSDictionary *childrenFileWrappers = [self.fileWrapper fileWrappers];
// now if we have a text but it is not represented, in the file wrapper, put it in. Same with the images.
if ([childrenFileWrappers objectForKey:TEXT_KEY] == nil && self.text != nil) {
NSData *textData = [self.text dataUsingEncoding:kCFStringEncodingUTF16];
NSFileWrapper *textFileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:textData];
[textFileWrapper setPreferredFilename:TEXT_KEY];
[self.fileWrapper addFileWrapper:textFileWrapper];
}
if ([childrenFileWrappers objectForKey:TITLE_KEY] == nil && self.title != nil) {
NSData *titleData = [self.title dataUsingEncoding:kCFStringEncodingUTF16];
NSFileWrapper *titleFileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:titleData];
[titleFileWrapper setPreferredFilename:TITLE_KEY];
[self.fileWrapper addFileWrapper:titleFileWrapper];
}
return self.fileWrapper;
}
谢谢!
最佳答案
我解决了这个问题。我的文档文件夹中有一个 .DS_Store
文件,它弄乱了结果。一旦我添加了一个 if 语句来排除一切正常。
关于ios - UIDocument loadFromContents 应该返回一个 NSFileWrapper;改为返回 NSConcreteData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430620/
我有一个 iOS 应用程序,它实现了 UIDocument 的自定义子类,它在数据包、归档对象和图像上封装了一个文件包装器。我最初将实现转换为 UIDocument 以获得 iCloud 支持,但它太
这个问题在这里已经有了答案: EXC_BAD_ACCESS using iCloud on multiple devices (1 个回答) 关闭 9 年前。 我有一个使用 iCloud 文档存储的
我正在制作一个文本编辑器应用程序,它将其每个文档存储为 NSFileWrapper 目录,文档文本和文档标题作为目录中的单独文件。我希望 loadFromContents: (id) contents
我在我的应用程序中使用 iCloud 来加载文本文件。加载文本文件时,当我调用 _UIDocument openWithCompletionHandler:^(BOOL success) 等时,iCl
我有一个自定义 UIDocument 子类并实现了 loadFromContents:和 contentsForType: . 为了检测文档在另一台设备上被更改,我添加了一个代理到 loadFromC
我是一名优秀的程序员,十分优秀!