0

Xcodeのスタティック・アナライザが、null以外の値を返すと予想されるメソッドから返される警告「nil」を返す理由を理解できません値"。メソッドは:dispatch_syncでオブジェクトを初期化するメソッドスタティック・アナライザによってフラグが付けられていないブロックが返される

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request 
            fromFile:(NSURL *)fileURL 
            progress:(NSProgress * __autoreleasing *)progress 
            completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { 
__block NSURLSessionUploadTask *uploadTask = nil; 
dispatch_sync(url_session_manager_creation_queue(), ^{ 
    uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; 
}); 

if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { 
    for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { 
     uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; 
    } 
} 

[self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; 

return uploadTask; // nil returned from a method that is expected to return a non-null value 
} 
+0

アナライザの状態:null以外の値を返すと予想されるメソッドからnilが返される –

+0

このメソッドはどのように '.h'ファイルで宣言されますか?それはスーパークラスメソッドをオーバーライドしますか? –

+0

'self.session'はnull可能ですか? – PHD

答えて

0

アナライザーは、独自のコードからキューを取ります。 uploadTasknilであるかどうかをコードがチェックしているという事実は、あなたが呼んでいるメソッドについて知っているかもしれない他のものにかかわらず、アナライザーに、nilと伝えます。 attemptsAFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTaskを超えても、それがnilのままである可​​能性があります。あなた自身のコードがそれを伝えます。もしそうなら、あなたのメソッドが非nilポインタを返すと宣言されているとすれば、あなたはデザイン契約に違反しているでしょう。

関連する問題