- (BOOL)handleData:(NSDictionary *)data error:(NSError **)error {
// pass the error pointer to NSJSONSerialization
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:options error:error];
// Check if NSJSONSerialization had errors
if (error) // <-- sometimes this works, sometimes it crashes...
return false;
...
return true;
}
- (void)someMethod {
NSError *error = nil;
BOOL result = [self handleData:dataDict error:&error];
if (error) {
// an error occurred
} else {
}
}
在这个例子中
someMethod
通过a
NSError
参考
handleData:error
. 这是通过传递指针/地址而不是对象来完成的(
...error:&error
)
方法
已处理ata:error
然后将此指针传递给
dataWithJSONObject:options:error
(现在没有
&
). 现在我想检查发生的错误,但是正确的方法是什么?
if (error)...
// This works if error == nil. However this is not always the case.
// Sometimes error is some address (e.g. 0x600001711f70) and *error == nil
// from the start of the method (passing error to NSJSONSerialization has no
// influence on this
if (*error)...
// This works in cases where error itself is not nil, but it crashes if
// error == nil
error == nil
在某些情况下
error != nil
但是
*error == nil
其他人呢?