Azure からモバイル サービスを介して SQL データベースからデータを取得する必要がある iOS アプリを作成しています。
データをダウンロードした後NSDictionary
、SQL テーブルからすべての属性を取得します。属性が空の場合、値はNSNull
です。
IF ステートメントなしで渡す方法はありNSNull
ますNSString
か (20 個の if ステートメントは必要ありません..)?
この問題に対処するためだけにカテゴリを作成しました。Core Data で使用しましたが、あなたにも役立つはずです。
@interface NSDictionary (Extensions)
- (id)NSNullToNilForKey:(NSString *)key;
@end
@implementation NSDictionary (Extensions)
- (id)NSNullToNilForKey:(NSString *)key
{
id value = [self valueForKey:key];
return value != [NSNull null] ? value : nil;
}
@end
サンプル使用:
NSString *value = [dictionary NSNullToNilForKey:@"key"];
単に割り当てることはできませんが、次のNSNull
ようなものを使用してすべてのインスタンスを除外できます。
NSDictionary *dictionary = // data from server
NSDictionary *filteredDictionary = [dictionary mutableCopy];
NSSet *keysToRemove = [orig keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
if (obj == [NSNull null]) {
return YES;
} else {
return NO;
}
}];
[filteredDictionary removeObjectsForKeys:[keysToRemove allObjects]];
これで、 を持つすべてのキーが削除されたことを除いて、同じ辞書ができNSNull
ました。