【问题标题】:How do I remove objects from an NSMutableArray matching an NSNumber如何从匹配 NSNumber 的 NSMutableArray 中删除对象
【发布时间】:2018-10-19 00:22:12
【问题描述】:

我有一个这样的数组:

    {
    id = 8281;
    name = “John”;
    title = “Title One“;
     },
    {
    id = 8729;
    name = “Bob”;
    title = “Title Two“;
    },
    {
    id = 8499;
    name = “Dave”;
    title = “Title Three“;
    }

我想删除包含特定 ID 的数组。

例如,假设我有:

NSNumber *removeThis =  '8281' ; 

我上面的数组被命名为“故事”。

我试过了:

[stories removeObject:removeThis];

但这不起作用。

我也试过了:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id != %@", removeThis];
NSArray *results = [stories filteredArrayUsingPredicate:predicate];

但数据永远不会从数组中删除。

有人能指出正确的方向吗?

【问题讨论】:

    标签: ios objective-c nsarray nspredicate


    【解决方案1】:

    我不这么认为:

    NSNumber *removeThis =  '8281'; 
    

    ... 甚至是有效的 Objective-C。使用 @(number) 制作 NSNumber 文字,例如:

    NSNumber *removeThis =  @(8281); 
    

    从那里,它应该完全按照您输入的方式工作:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id != %@", removeThis];
    NSArray *results = [stories filteredArrayUsingPredicate:predicate];
    

    【讨论】:

    • 是的,应该可以。但是,这将创建一个新数组results,而不是修改数组stories。如果您想从stories 数组“就地”删除对象,您可以使用[stories filterUsingPredicate: predicate]
    • 谢谢 - 这些建议有帮助 - 尤其是将数字作为字符串传递。我被挂断的地方是我正在更新的数组已经在使用中,并且在我过滤后它没有更新。我最终能够通过这样做来更新它:@synchronized(stories) { NSArray *results = [stories filteredArrayUsingPredicate:predicate];故事 = [结果可变复制]; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多