我现在正面临一个由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时,此问题不存在答案 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");
}