web-dev-qa-db-ja.com

Xcode 7、Obj-C、「ヌル以外の引数を必要とする呼び出し先にヌルが渡されました」

Xcode 7では、次の警告が表示されます。

Null passed to a callee that requires a non-null argument

.. NSMutableArrayのこのnil初期化から...

    sectionTitles = [[NSMutableArray alloc] initWithObjects:nil];

代わりにremoveAllObjectsを使用する必要があることがわかりました。

    [sectionTitles removeAllObjects];

ただし、これによりsectionTitles.count == 0を評価できません。 sectionTitles == nilを試しましたが、iniWithObjectsを使用しない限り、後でオブジェクトを追加することはできません。

レコードがないときにデータソースを更新するとき、配列をnilまたはゼロに設定する必要があります。 addObjectを使用していない限り、initWithObjectsを使用してアイテムを追加できないようです。

19
Jules

試してみませんか:

sectionTitles = [[NSMutableArray alloc] init];

または次のいずれか:

sectionTitles = [[NSMutableArray alloc] initWithCapacity:sectionTitles.count];
sectionTitles = [NSMutableArray new];
sectionTitles = [NSMutableArray array];
sectionTitles = [NSMutableArray arrayWithCapacity:sectionTitles.count];

たぶんいくつかの愚かなもの:

sectionTitles = [NSMutableArray arrayWithArray:@[]];
sectionTitles = [@[] mutableCopy];

空の可変配列を作成する方法はたくさんあります。 doc を読んでください。

16
Jeffery Thomas

NULL以外のパラメーターを渡すことは、一部だけの答えです。

新しいObjective-C nullabilityアノテーションは、フェンスのSwift=側のコードに大きな利点がありますが、Swiftの行を書かなくてもここでかなりの利益があります。nonnullは、オートコンプリート中にヒントを提供し、適切なポインターの代わりにnilを送信すると警告を生成します。

NSHipsterを読む 包括的な記事

独自のコードで同じコントラクトを利用するには、nonnullまたはnullableを使用します。

Obj-C

- (nullable Photo *)photoForLocation:(nonnull Location *)location
19
SwiftArchitect