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
を使用してアイテムを追加できないようです。
試してみませんか:
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 を読んでください。
NULL以外のパラメーターを渡すことは、一部だけの答えです。
新しいObjective-C nullabilityアノテーションは、フェンスのSwift=側のコードに大きな利点がありますが、Swiftの行を書かなくてもここでかなりの利益があります。
nonnull
は、オートコンプリート中にヒントを提供し、適切なポインターの代わりにnilを送信すると警告を生成します。
NSHipsterを読む 包括的な記事 。
独自のコードで同じコントラクトを利用するには、nonnull
またはnullable
を使用します。
Obj-C
- (nullable Photo *)photoForLocation:(nonnull Location *)location