0

在使用垃圾收集的项目中: Clang在分配 *anError 的行上警告“可能的 null 取消引用 ....”。

但这对我来说是正确的:为什么 NSError 需要双重间接?(指向指针的指针)

谁能看到我没有看到的东西?

- (NSData *)bookmarkDataForCurrentURL:(NSURL *)theURL error:(NSError **)anError
{
    NSArray *bkKeys = [CBPrepCommon bookmarkPropertyKeys];
    NSError *errorA = nil;
    NSData *bkmark = [theURL bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution includingResourceValuesForKeys:bkKeys relativeToURL:nil error:&errorA];

    if (![bkmark length] > 0) {
    if (errorA) {
        // error here
        *anError = [NSError errorWithDomain:[errorA domain] code:[errorA code] userInfo:[errorA userInfo]];
    }
    return nil;
}
return bkmark;

}

4

1 回答 1

0
if (errorA && anError) {
    // error here
    *anError = [NSError errorWithDomain:[errorA domain] code:[errorA code] userInfo:[errorA userInfo]];
}

编辑:更清洁:

- (NSData *)bookmarkDataForCurrentURL:(NSURL *)theURL error:(NSError **)anError
{
    NSArray *bkKeys = [CBPrepCommon bookmarkPropertyKeys];
    NSData *bkmark = [theURL bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution includingResourceValuesForKeys:bkKeys relativeToURL:nil error:anError];

    if ([bkmark length] == 0) {
        return nil;
    }

    return bkmark;
}
于 2012-06-12T18:52:05.040 回答