我正在尝试从 NSData
加载文档(它来自我应用程序中的 Dropbox
文件,但为简单起见,下面的示例使用了 .txt 文件,这会导致我试图修复的相同问题)。
问题:
我实例化一个 NSDictionary,并将它作为输出参数传递给 [NSAttributedString -initWithData:options:documentAttributes:error:]
。
但是, NSDictionary 实例被释放,并导致 -initWithData:options:documentAttributes:error: 崩溃。
当我启用 NSZombie
时,我得到的错误是: [__NSDictionaryI retain]: message sent to deallocated instance
- 当我将 NULL 传递给 documentAttributes 时,initWithData:options:documentAttributes:error:
运行良好。
这是代码:
NSError* error;
NSString* path = [[NSBundle mainBundle] pathForResource:@"Forward Thinking"
ofType:@"txt"];
NSData* data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways error:&error];
if (data) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary* documentAttributes = [[NSDictionary alloc] init];
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&documentAttributes error:NULL];
self.textView.attributedText = attrStr;
});
}
任何线索都会很棒!
最佳答案
您不应分配传递给此方法的 NSDictionary
。你想要的是:
NSDictionary* documentAttributes;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&documentAttributes error:NULL];
它正在将
documentAttributes
传递给您。您不会将属性传递给它。关于ios - NSAttributedString initWithData :options:documentAttributes:error: documentAttributes not retained in ARC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21641759/