我的iPhone应用程序中出现异常,
-[__NSCFString sizeWithAttributes:]: unrecognized selector sent to instance,
当我开始使用iOS6.1的应用程序时,在iOS7或更高版本下一切正常。 我项目中iOS6和更高版本之间的唯一区别是XIB。按下按钮时发生错误。 也许它来自不同的XIB,也许不是。
它看起来像是内存泄漏,但我无法弄清楚它为什么会发生。 尝试从按钮计算文本大小时发生异常。
我设置Exception-breakpoints来查找错误。 这里有一些来自stacktrace的信息:
在此方法中会发生错误:
- (float) calculateButtonWidth:(TypeButtonRest*) typeButtonRest{
UIFont *font = [UIFont boldSystemFontOfSize:16];
NSDictionary *userAttributes = @{NSFontAttributeName: font,
NSForegroundColorAttributeName: [UIColor blackColor]};
const CGSize textSize = [[typeButtonRest text] sizeWithAttributes: userAttributes];
...
从这里调用该方法:
- (ButtonMatrixInfos*) calculateButtonSchema:(NSMutableArray*) buttons screenWidth:(double)screenWidth minMargin:(double)minMargin{
ButtonMatrixInfos *returnValue = [[[ButtonMatrixInfos class] alloc] init];
int buttonCount = [buttons count];
[buttons retain];
for (int i=0; i < buttonCount; i++) {
float curWidth = [self calculateButtonWidth:[buttons objectAtIndex:i]];
maxButtonWidth = curWidth > maxButtonWidth ? curWidth : maxButtonWidth;
}
...
我的假设是,buttons
已损坏。他们来自这里:
-(RadioButtonContainer*)addRadioButtons:(NSMutableArray *)buttons withButtonGroupName:(NSString*) groupName andMarginLeft:(int) marginLeft andMarginRight:(int) marginRight preselected:(NSString*) preselected {
ButtonListLayouter *bll = [[[[ButtonListLayouter class] alloc] init]retain];
ButtonMatrixInfos *bmi = [bll calculateButtonSchema:buttons screenWidth:(screenSize.width - marginLeft - marginRight) minMargin:5];
...
在这里创建:
NSMutableArray *buttonsRest = [[[NSMutableArray alloc] init]retain];
for (int i=0; i < [buttons count]; i++) {
TypeButtonRest *tpr = [[[[TypeButtonRest class] alloc] init]retain];
tpr.text = [[buttons objectAtIndex:i] objectForKey:@"value"];
tpr.key = [[buttons objectAtIndex:i] objectForKey:@"key"];
[buttonsRest addObject:tpr];
}
我希望这段代码片段可以提供帮助。
最好的问候