Dans Xcode 7, je reçois cet avertissement:
Null passed to a callee that requires a non-null argument
.. à partir de cette initialisation nulle d'un NSMutableArray ...
sectionTitles = [[NSMutableArray alloc] initWithObjects:nil];
J'ai trouvé que je devrais utiliser removeAllObjects
à la place.
[sectionTitles removeAllObjects];
Cependant, cela ne me permet pas d'évaluer un sectionTitles.count == 0
. J'ai essayé sectionTitles == nil
, sauf si j'utilise iniWithObjects
Je ne peux pas ajouter d'objets plus tard.
Je dois définir le tableau sur zéro ou zéro, lorsque je rafraîchis ma source de données, lorsqu'il n'y a pas d'enregistrements. Je ne semble pas être en mesure d'utiliser addObject
pour ajouter des éléments sauf si j'ai utilisé initWithObjects
.
Pourquoi n'essayez-vous pas:
sectionTitles = [[NSMutableArray alloc] init];
ou l'un des éléments suivants:
sectionTitles = [[NSMutableArray alloc] initWithCapacity:sectionTitles.count];
sectionTitles = [NSMutableArray new];
sectionTitles = [NSMutableArray array];
sectionTitles = [NSMutableArray arrayWithCapacity:sectionTitles.count];
peut-être des idiots:
sectionTitles = [NSMutableArray arrayWithArray:@[]];
sectionTitles = [@[] mutableCopy];
Il existe de nombreuses façons de créer des tableaux mutables vides. Lisez simplement le doc .
La transmission de paramètres non nuls n'est que partiellement la réponse.
Les nouvelles annotations de nullité Objective-C ont d'énormes avantages pour le code du côté Swift de la clôture, mais il y a un gain substantiel ici même sans écrire une ligne de Swift. Les pointeurs marqués comme
nonnull
donnera maintenant un indice lors de la saisie semi-automatique et produira un avertissement s'il est envoyé nul au lieu d'un pointeur approprié.
Lisez NSHipster article complet .
Pour profiter du même contrat dans votre propre code, utilisez nonnull
ou nullable
:
Obj-C
- (nullable Photo *)photoForLocation:(nonnull Location *)location