4

ここでnil、null、値を削除する方法をしばらく探していましたが、見たものはすべて試しましたが、セレクターに互換性がないという例外が常にあります。これは私の配列であり、NSMutableDictionary を持つ NSMutableArray です。

Array Value = (
        {
           "sub_desc" = "sub cat description of Laptop";
           "sub_name" = Laptop;
        },
        {
           "sub_desc" = "sub cat description of Printers";
           "sub_name" = Printers;
        },
           "<null>",
           "<null>",
           "<null>",
           "<null>"
)

値を削除しようとしていますが、アイデアはありますか?

私のセグエはこのようになります

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"MySegue"]) {

        ChildTableViewController *myNextPage = [segue destinationViewController];
        if ([myNextPage isKindOfClass:[ChildTableViewController class]]){  
            NSString *key = [[[parsedData listPopulated]objectAtIndex:self.tableView.indexPathForSelectedRow.row]valueForKey:@"name"];
            myNextPage.childData = [[parsedData childPopulated]valueForKey:key]; 
        }
    }
}

childData は、私の子ビュー コントローラーの NSMutableArray であり、childPopulated は、NSMutableDictionary を挿入する NSMutableArray です。

4

2 に答える 2

4

使用[NSMutableArray removeObject:]:

指定されたオブジェクトの配列内の出現をすべて削除します。

NSMutableArray *array = ...;
[array removeObject:@"<null>"];

注: 配列には辞書と文字列オブジェクトが混在しています。辞書オブジェクトだけではありません。

于 2013-08-30T14:01:35.583 に答える
2

このコードは、次のようにする必要があります。

NSMutableIndexSet *indexSet;
for (NSUinteger i = 0; i < [array count]; i++) {
    if (![array[i] isKindOfClass:[NSNull class]]) {
        [indexSet addIndex:i]
    }
}
array = [array objectsAtIndexes:indexSet]

文字列nullのオブジェクトを削除する場合は、次のようにします。

NSMutableIndexSet *indexSet;
for (NSUinteger i = 0; i < [array count]; i++) {
    if ([array[i] isKindOfClass:[NSString class]] && [array[i] isEqualToString:@"<null>") {
        [indexSet addIndex:i]
    }
}
[array removeObjectsAtIndexes:indexSet]
于 2013-08-30T14:06:20.587 に答える