当用户尝试将 int 添加到 nsmutablearray 时,我想发出警告消息
基本上任何包含非 nsstring / nsnumber 值的插入语句都会导致运行时崩溃。当您键入 %@ 而不是 %d NSLog(int); 时,这与您遇到的崩溃完全相同。崩溃是好的,但我想向用户抛出一个友好的“致命”消息。
到目前为止,我尝试使用 isKindOfClass NSObject 进行尝试,但整数正在溜走。
#define FATAL_MSG "FATAL: object is not an NSObject subclass. Are you using int? use [NSNumber numberWithInt:1] \n"
#define VAToArray(firstarg) ({\
NSMutableArray* valistArray = [NSMutableArray array];\
id obj = nil;\
va_list arguments;\
va_start(arguments, sql);\
@try { \
while ((obj = va_arg(arguments, id))) {\
if([obj isKindOfClass:[NSObject class]]) [valistArray addObject:obj];\
else printf(FATAL_MSG); \
}\
} \
@catch(NSException *exception){ \
printf(FATAL_MSG); \
} \
va_end(arguments);\
valistArray;\
})
- (void)test:(NSString*)sql,... {
NSLog(@"VAToArray :%@",VAToArray(sql)); }
// 然后调用这个
[self test:@"str",@"test",nil];
当我称之为 [self test:@"str",2,nil];
抛出错误信息。