做一些调试我打印出一个NSDictionary变量的描述,它给出了:
(NSDictionary *) labelAttrs = 0x00000001
Run Code Online (Sandbox Code Playgroud)
有人可以澄清为什么会这样1吗?
我理解nil或对象指针,但为什么1?
UPDATE
代码:
NSDictionary *labelAttrs = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]};
Run Code Online (Sandbox Code Playgroud)
它在iOS5上运行时崩溃但不是iOS6但是这样:
似乎说你可以使用iOS5的新文字(只要你针对iOS6构建并使用Xcode> = 4.5并使用最新的LLVM进行编译 - 例如看屏幕抓取).而且,根据Apple的说法,我应该可以使用它们:https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
以下是它在Xcode中的外观:

然后我走过去:
注意:这给了我同样的崩溃:
NSDictionary *labelAttrs = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:CUSTOMFONT size:size], NSFontAttributeName, [NSNumber numberWithInt:0], NSStrokeWidthAttributeName, nil];
Run Code Online (Sandbox Code Playgroud)
删除此(以及以下2行代码)意味着应用程序运行时不会崩溃.但显然没有归因于字符串.
更新:已解决.在iOS5上无法使用归因字符串(至少对于UILabel而言):在iOS 6之前NSAttributedString是否可用?
问题是NSAttributedString UIKit 添加直到 iOS 6 才可用。这意味着常量 NSForegroundColorAttributeName 等未定义。因此,字典的创建在尝试引用这些内容时失败了。
(调试此方法的方法 - 无需检查错误 iOS 版本的引用 (;)) - 是分解语句:
UIColor* value1 = [UIColor darkGrayColor];
NSString* key1 = NSForegroundColorAttributeName;
UIFont* value2 = [UIFont fontWithName:CUSTOMFONT size:size];
NString* key2 = NSFontAttributeName;
NSNumber* value3 = [NSNumber numberWithInt:0];
NSString* key3 = NSStrokeWidthAttributeName;
NSDictionary *labelAttrs0 = [NSDictionary dictionaryWithObjectsAndKeys:nil];
NSDictionary *labelAttrs1 = [NSDictionary dictionaryWithObjectsAndKeys:value1, key1, nil];
NSDictionary *labelAttrs2 = [NSDictionary dictionaryWithObjectsAndKeys:value2, key2, nil];
NSDictionary *labelAttrs3 = [NSDictionary dictionaryWithObjectsAndKeys:value3, key3, nil];
Run Code Online (Sandbox Code Playgroud)
然后看看什么地方失败了。在这种情况下,您可能会在分配 labelAttrs1 时失败。如果您随后使用 NSLog value1 和 key1,您会在 key1 上收到错误。)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |