在NSMutableArray内部的NSMutableDictionary中删除<null>

4

我一直在搜索如何删除 nil、null 值的方法,试了谷歌上所有看到的方法,但总是出现“选择器不兼容”的异常。

这是我的 Array 和带有 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>"
)

我尝试删除这些值,有什么想法吗?

我的segue如下:

-(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是我的Child View Controller中的NSMutableArray,childPopulated也是一个NSMutableArray,我向其中插入了NSMutableDictionary。


1
你不需要将问题重命名为[SOLVED],而是应该通过点击最佳答案旁边的小勾来接受一个答案。 - James Webster
但我自己解决了,而且我不会选择一个正确的答案,因为那是错误的。但下次我会记住这一点。 - Ace Munim
您可以回答并接受自己的问题和答案。 - James Webster
2个回答

4

使用 [NSMutableArray removeObject:] 方法:

从数组中删除所有与给定对象相同的元素。

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

注意:您的数组包含字典和字符串对象的混合;不仅仅是字典对象。

我已经尝试过这个了,然后再次尝试抛出异常 xD*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因是:'-[__NSArrayI removeObject:]: 无法识别的选择器发送到实例 0x718ff10' - Ace Munim
3
这句话的意思是array不是一个NSMutableArray,而是一个NSArray。在尝试修改它之前,需要将其变成可变的(mutable)。 - trojanfoe
1
@AceMunim 好的,请在那段代码后面添加以下内容(在 myNextPage.childData = ... 后面),然后告诉我它的意思:NSLog("childData=%@", NSStringFromClass([myNextPage.childData class]));; - trojanfoe
1
@AceMunim 我的意思是传递完整对象(即 [otherClass doThingToMyCollection:array])。 - trojanfoe
1
@AceMunim 抱歉,但这个讨论已经偏离主题了。您最好新开一个问题,询问如何将可变数组传递到另一个类中以便进行修改。 - trojanfoe
显示剩余13条评论

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]

空对象是包含文本@"<null>"NSString,而不是NSNull对象。 - trojanfoe
他说:“我已经搜索了一段时间,想知道如何删除 nil、null 值”,但他并没有说包含单词“null”的字符串。然而,如果要删除的对象是字符串“null”,那么你的答案是正确的。 - Juan Catalan
2
@[[NSNull null], @"<null>"] 的 NSLog 输出是 "<null>", "<null>"。无法区分字符串和空对象。 - Martin R
谢谢马丁!这就是为什么两个不同的人想到了两个不同的对象,[NSNull null] 和 @"<null>"。很好的观点。 - Juan Catalan
完全同意,这很令人困惑。 - Juan Catalan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接