不兼容的指针类型将UIFont发送到NSDictionary类型的参数?

时间:2013-10-18 02:47:10

标签: ios nsdictionary sigabrt uifont

我得到了不兼容的指针类型,将UIFont发送到NSDictonary类型的参数,它让我得到一个信号SIGABRT,我不知道这意味着什么是我的代码,我得到错误...

- (void)drawDayNumber {
    if (self.selectionState == DSLCalendarDayViewNotSelected) {
    [[UIColor colorWithWhite:66.0/255.0 alpha:1.0] set];
    }
    else {
        [[UIColor whiteColor] set];
    }

    UIFont *textFont = [UIFont boldSystemFontOfSize:17.0];
    CGSize textSize = [_labelText sizeWithAttributes:textFont];//Im getting it here.

    CGRect textRect = CGRectMake(ceilf(CGRectGetMidX(self.bounds) - (textSize.width /2.0)), ceilf(CGRectGetMidY(self.bounds) - (textSize.height / 2.0)), textSize.width, textSize.height);
    [_labelText drawInRect:textRect withAttributes:textFont];//And here.
}

3 个答案:

答案 0 :(得分:1)

崩溃1

问题在于此代码:

[_labelText drawInRect:textRect withAttributes:textFont];

drawInRect:withAttributes:方法的第二个参数需要NSDictionary,您正在传递UIFont个对象。这就是崩溃的原因。

您应该执行以下操作:

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: textFont,NSFontAttributeName,nil];
[_labelText drawInRect:textRect withAttributes:dict];

您可以使用:drawInRect:withFont方法。

[_labelText drawInRect:rect withFont:textFont];

崩溃2

在以下代码中:

CGSize textSize = [_labelText sizeWithAttributes:textFont];

此处参数错误,sizeWithAttributes:方法需要NSDictionary,您正在传递UIFont个对象。

将其更改为:

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: textFont,NSFontAttributeName,nil];
CGSize textSize = [_labelText sizeWithAttributes:dict];

答案 1 :(得分:1)

您应该为属性创建字典:

NSDictionary *attributes = @{NSFontAttributeName : textFont};

您应该使用此attributes字典作为这些方法的参数。如果您也想设置字体颜色,可以执行以下操作:

UIColor *color;
if (self.selectionState == DSLCalendarDayViewNotSelected)
    color = [UIColor colorWithWhite:66.0/255.0 alpha:1.0];
else
    color = [UIColor whiteColor];

UIFont *textFont = [UIFont boldSystemFontOfSize:17.0];

NSDictionary *attributes = @{NSFontAttributeName            : textFont,
                             NSForegroundColorAttributeName : color};

CGSize textSize = [_labelText sizeWithAttributes:attributes];

CGRect textRect = CGRectMake(ceilf(CGRectGetMidX(self.bounds) - (textSize.width /2.0)), ceilf(CGRectGetMidY(self.bounds) - (textSize.height / 2.0)), textSize.width, textSize.height);
[_labelText drawInRect:textRect withAttributes:attributes];

有关属性的详细信息,请参阅NSAttributedString Application Kit Additions Reference以获取可在此NSDictionary中使用的各种密钥的列表。

答案 2 :(得分:0)

您正在将UIFont对象传递给需要字典的方法。您需要创建一个字典,用于设置您希望设置的键。

你可能在想这个方法。

[_labelText sizeWithFont:font];