ios - NSAttributedString 初始化数据 :options:documentAttributes:error: documentAttributes not retained in ARC

标签 ios nsattributedstring

我正在尝试从 NSData 加载文档(它来 self 应用程序中的 Dropbox 文件,但为了简单起见,下面的示例使用了一个 .txt 文件,这导致了我正在尝试解决的相同问题)。

问题: 我实例化一个 NSDictionary,并将其作为输出参数传递给 [NSAttributedString -initWithData:options:documentAttributes:error:]

但是,NSDictionary 实例被释放,并导致 -initWithData:options:documentAttributes:error: 崩溃。

当我启用 NSZombie 时,我得到的错误是:[__NSDictionaryI retain]: message sent to deallocated instance

-initWithData:options:documentAttributes:error: 当我将 NULL 传递给 documentAttributes 时运行正常。

代码如下:

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 初始化数据 :options:documentAttributes:error: documentAttributes not retained in ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641759/

相关文章:

iOS:调用失败返回app

ios - 是否可以使用核心蓝牙概念检测正常信标?

iOS:在文本 UILabel 周围绘制边框

ios - didReceiveRemoteNotification 未在 iOS 的前台 firebase 云消息传递中调用

ios - 为什么这段代码不允许我在我的 tableViewCell 中放置一个复选标记配件?

ios - 尝试保存核心数据记录后出错

ios - UITextView 末尾的额外空间

cocoa - 如何获得 NSButton 的首选大小?

ios - 保留格式属性时NSAttributedString字体更改

cocoa - 当设置 NSLineBreakByTruncatingTail 时,使 NSTextField 不收缩