NSNumber objCType EXC_BAD_ACCESS

时间:2015-01-31 16:28:43

标签: ios objective-c nsnumber

我现在正面临一个由NSNumber的objCType引起的案例,即numberWithInt。 当我从NSUserDefault检索它,并检查它的类型。激活了EXC_BAD_ACCESS。

以下是代码:

 NSNumber* number = [uD objectForKey:@"some_key"];
 NSLog(@"Data Type %@",[number objCType]);//This Line fired EXC_BAD_ACCESS

uD代表在代码的其他部分初始化的UserDefault对象。 从numberWithLong

创建NSNumber时,此问题不存在

2 个答案:

答案 0 :(得分:1)

objCType会返回一个C字符串,因此您需要在格式字符串中使用%s而不是%@。像这样:

NSLog(@"Data Type %s", [number objCType]);

请注意,您可能希望通过执行以下操作来防范nil number的值:

NSLog(@"Data Type %s", [number objCType] ?: "");

答案 1 :(得分:0)

您不能在NSLog上使用带有%@的c类型。你应该这样做来检查类型。

if (strcmp([number objCType], @encode(BOOL)) == 0) {
    NSLog(@"this is a bool");
} else if (strcmp([number objCType], @encode(int)) == 0) {
    NSLog(@"this is an int");
}