в проекте, использующем сбор мусора: Clang Предупреждения «Потенциальная нулевая разметка ....» на линии, назначающей * anError.Как исправить предупреждение Clang в методе, используя двойную косвенность для NSError?
Но это смотреть прямо мне в соответствии с: Why does NSError need double indirection? (pointer to a pointer)
Может кто-нибудь увидеть то, что я не вижу?
- (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;
}
Это выглядит нормально для меня тоже, при условии, что входящие параметры хороши. Отправляется ли сообщение, если вы положили 'if (anError) {...}' вокруг вашего назначения на '* anError'? –
да, но я не понимаю, как и почему, если (anError) { \t \t \t \t * anError = [NSError errorWithDomain: [errorA домен] Код: [errorA код] USERINFO: [errorA USERINFO]]; \t \t \t} будет называться? – lulu
Это говорит вам, что вы не защищены от случая с чем-то, вызывающего 'NSData * data = [anObject bookmarkDataForCurrentURL: theURL error: nil];', который является истинным, но не компилятором, который, как правило, касался себя. –