如何从 NSMutableArray 中删除 nil 对象?

Posted

技术标签:

【中文标题】如何从 NSMutableArray 中删除 nil 对象?【英文标题】:How to remove nil object from NSMutableArray? 【发布时间】:2017-05-30 12:59:36 【问题描述】:

我的NSMutableArray 包含以下数据

<DoctorInfo: 0x15de99e0> (entity: DoctorInfo; id: 0x15defbe0 <x-coredata://39D9B/DoctorInfo/p8> ; data: 
    doctorName = nil;
    emailAdd = nil;
    hospitalName = nil;
    mobileNumber = nil;
    phoneNumber = nil;
),
<DoctorInfo: 0x15de9b00> (entity: DoctorInfo; id: 0x15da5dc0 <x-coredata://39D9BED3/DoctorInfo/p10> ; data: 
    doctorName = nil;
    emailAdd = nil;
    hospitalName = nil;
    mobileNumber = nil;
    phoneNumber = nil;
)
)

如何使用nil 删除这些对象?我通过将NSMutableArray 更改为NSArray 尝试了以下代码,然后对其进行过滤,但它仍然无法正常工作:

 NSString *predString = [NSString stringWithFormat:@"(doctorName BEGINSWITH[cd] '%@')", nil];

    NSPredicate *pred = [NSPredicate predicateWithFormat:predString];

     self.filteredDocInfoArray = [self.unfilteredDocInfoArray filteredArrayUsingPredicate:pred];

【问题讨论】:

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(DoctorInfo * evaluateObject, NSDictionary *bindings) if (evaluatedObject.doctorName == nil) return YES; 返回否; ]; 【参考方案1】:

您在这样的谓词字符串中测试 nil:

NSPredicate *pred = [NSPredicate predicateWithFormat: @"doctorName = nil"];

有关示例,请参阅the documentation。

【讨论】:

【参考方案2】:

您不能将 nil 对象添加到数组。在您的情况下,您正在添加一个具有一些 nil 属性的对象!

你可以试试这个:

[yourArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) 

    DoctorInfo *customObj = obj;
    if (customObj.doctorName) 
        //add obj to temp array
    
];

现在你可以用 tempArr 替换 yourArr

如果你想使用NSPredicate,请参考this.

【讨论】:

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

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

如何在 NSMutableArray 中迭代时删除 NSDictionary [重复]

按键从 NSMutableArray 中删除对象

从 NSmutableArray 中删除项目

从 NSMutableArray 中删除对象时崩溃

从 NSMutableArray 中删除一个值