web-dev-qa-db-fra.com

Xcode 7, Obj-C, "Null passé à un appelé qui nécessite un argument non nul"

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.

19
Jules

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 .

16
Jeffery Thomas

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
19
SwiftArchitect