'CFTypeRef _Nullable'类型的集合元素(又名'const void *')不是Objective-C对象

时间:2016-06-14 09:20:09

标签: ios xcode

我的项目中有一个以下的util方法。我在iOS 10的早期版本中没有遇到任何问题。

+ (CGRect)boundsRectWithSize:(id)objView
{
    return [[objView text] boundingRectWithSize:CGSizeMake([objView bounds].size.width, CGFLOAT_MAX)
                                        options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                     attributes:@{ NSFontAttributeName : [objView font]}//Issue in this line
                                        context: nil];
}

enter image description here

objView可以是UIlabelUITextViewUItextField

但在iOS 10中,应用程序无法使用以下错误进行编译

Collection element of type 'CFTypeRef _Nullable' (aka 'const void *') is not an Objective-C object

1 个答案:

答案 0 :(得分:2)

首先我认为它是UILabel,所以我说要在属性字典中将它强制转换为UILabel。但它可以是UILabel,UITextView和UITextField中的任何一种,如你所说。因此,您可以先使用valueForKey:方法获取字体,然后在属性字典中使用此字体。

 + (CGRect)boundsRectWithSize:(id)objView
    {
        UIFont *font= (UIFont *)[objView valueForKey:@"font"];
        return [[objView text] boundingRectWithSize:CGSizeMake([objView bounds].size.width, CGFLOAT_MAX)
                                            options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                         attributes:@{ NSFontAttributeName : font}//Issue in this line
                                            context: nil];
    }