Iphone 如何解决NSException格式使用非字符串文字的安全问题
我用的都是基于块的。通常,它们定义这样的操作Iphone 如何解决NSException格式使用非字符串文字的安全问题,iphone,objective-c,error-handling,compiler-errors,nserror,Iphone,Objective C,Error Handling,Compiler Errors,Nserror,我用的都是基于块的。通常,它们定义这样的操作 SomeMailCoreOp *op = [session getOp]; [op start:^(NSError* error, id result) { if (error) { // handle error code } }]; 所以我想做的基本上就是每次遇到错误时抛出一个NSException。。这样我就可以在我的代码库中的其他地方捕获它。。因此,我为NSError创建了一个
SomeMailCoreOp *op = [session getOp];
[op start:^(NSError* error, id result) {
if (error) {
// handle error code
}
}];
所以我想做的基本上就是每次遇到错误时抛出一个NSException。。这样我就可以在我的代码库中的其他地方捕获它。。因此,我为NSError创建了一个类别:
这就是我通常处理错误的方式:
SomeMailCoreOp *op = [session getOp];
[op start:^(NSError* error, id result) {
if (error) {
[NSException raise:@"failure" format:[error description]];
}
}];
我认为这是有道理的,因为在for NSException中,他们得到了以下格式:
格式,一个人类可读的消息字符串,即异常
使用以下变量参数的转换规范进行推理:
跟着
但是,当我执行上述操作时,我总是收到以下编译器警告:
format string is not a string literal (potentially insecure)
如何解决此问题?格式是一个格式字符串,如NSLog或[NSString stringWithFormat:]中的格式字符串。就你而言
[NSException raise:@"failure" format:@"%@", [error description]];
不会产生警告。有关更多信息,请查看
有关为什么使用非文字字符串作为格式不安全的更多信息,请参阅Wikipedia上的
请注意,Apple不鼓励将异常用于流控制:
发件人:
尽管在许多编程环境中,异常通常用于控制编程流程或表示错误,但在Cocoa和Cocoa Touch应用程序中不要以这种方式使用异常。相反,您应该使用方法或函数的返回值来指示发生了错误,并在错误对象中提供有关问题的信息
发件人:
如果您来自其他平台和语言,您可能习惯于处理大多数错误处理的异常。当您使用Objective-C编写代码时,异常仅用于程序员错误,如越界数组访问或无效方法参数。在发布应用程序之前,您应该在测试过程中发现并修复这些问题
format是一个格式字符串,如NSLog或[NSString stringWithFormat:]中的格式字符串。就你而言
[NSException raise:@"failure" format:@"%@", [error description]];
不会产生警告。有关更多信息,请查看
有关为什么使用非文字字符串作为格式不安全的更多信息,请参阅Wikipedia上的
请注意,Apple不鼓励将异常用于流控制:
发件人:
尽管在许多编程环境中,异常通常用于控制编程流程或表示错误,但在Cocoa和Cocoa Touch应用程序中不要以这种方式使用异常。相反,您应该使用方法或函数的返回值来指示发生了错误,并在错误对象中提供有关问题的信息
发件人:
如果您来自其他平台和语言,您可能习惯于处理大多数错误处理的异常。当您使用Objective-C编写代码时,异常仅用于程序员错误,如越界数组访问或无效方法参数。在发布应用程序之前,您应该在测试过程中发现并修复这些问题