3

Dans this thread la mise en œuvre d'une méthode déléguée UITextInput, l'affiche dit que quand ils exécutent une analyse statique sur leur code, ils obtiennent une erreur sur cette fonction:Les résultats de la fonction Objective-C sont-ils non normaux par défaut?

- (NSArray *)selectionRectsForRange:(UITextRange *)range 
{ 
    return nil; 
} 

L'erreur est « nul retour d'une méthode qui est devrait renvoyer une valeur non nulle. "

La déclaration de fonction n'a pas de spécificateur de nullité sur le résultat. Les résultats de la fonction sont-ils non-null par défaut? (Je travaille principalement dans Swift ces jours-ci, et ne suis pas expert sur les derniers changements à Objective-C.)

Répondre

3

Ils ne sont pas.

L'en-tête lorsque cette méthode est déclarée est crocheté avec the "assume nonnull" macros:

// 
// UITextInput.h 
// UIKit 
// 
// Copyright (c) 2009-2017 Apple Inc. All rights reserved. 
// 

#import <CoreGraphics/CoreGraphics.h> 

#import <UIKit/UITextInputTraits.h> 
#import <UIKit/UIResponder.h> 

//=================================================================================================== 
// Responders that implement the UIKeyInput protocol will be driven by the system-provided keyboard, 
// which will be made available whenever a conforming responder becomes first responder. 

NS_ASSUME_NONNULL_BEGIN 

// snip 
// ... 
// L150 
/* Geometry used to provide, for example, a correction rect. */ 
- (CGRect)firstRectForRange:(UITextRange *)range; 
- (CGRect)caretRectForPosition:(UITextPosition *)position; 
- (NSArray *)selectionRectsForRange:(UITextRange *)range NS_AVAILABLE_IOS(6_0);  // Returns an array of UITextSelectionRects 

Ainsi, cette méthode a en effet été marqué comme ayant une valeur de retour non nul.

+0

Etre pédant mais la méthode n'est pas explicitement marquée comme ayant une valeur de retour non nulle. Cela nécessiterait l'utilisation de la sélection '- (NSArray * _Nonnull) ...'. L'utilisation de 'NS_ASSUME_NONNULL_BEGIN' * implicitement * marque toutes les méthodes jusqu'à la' NS_ASSUME_NONNULL_END'. – rmaddy

+0

Cool. Merci. (Et rmaddy, tout le bloc de méthodes a été marqué comme renvoyant des valeurs non nulles.) On dirait que les docs sur ces méthodes devraient les lister comme nonnull cependant. –