如何从匹配 NSNumber 的 NSMutableArray 中删除对象

Posted

技术标签:

【中文标题】如何从匹配 NSNumber 的 NSMutableArray 中删除对象【英文标题】:How do I remove objects from an NSMutableArray matching an NSNumber 【发布时间】: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];

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

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

【问题讨论】:

【参考方案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];故事 = [结果可变复制];

以上是关于如何从匹配 NSNumber 的 NSMutableArray 中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSNumber 转换和比较为 BOOL?

从 '(NSNumber) -> NSNumber' 转换为不相关类型 '(Any) -> Any' 总是失败

将 NSNumber 的 NSSet 更改为 int 的 NSSet

Restkit 从 NSNumber 序列化布尔值

NSNumber 到 NSInteger 从 2 到 528839664

如何增加 NSNumber