如何从匹配 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) -> NSNumber' 转换为不相关类型 '(Any) -> Any' 总是失败
将 NSNumber 的 NSSet 更改为 int 的 NSSet