我有一个员工列表的CKReferenceList,内容可能如下所示
(
"<CKReference: 0xa5bc930; 83a97165-2635-4bda-a7eb-fabf5a725bed:(_defaultZone:__defaultOwner__)>",
"<CKReference: 0xa50a2e0; 9B7F4269-D8BA-4CE9-9BCF-AD2047B73EB5:(_defaultZone:__defaultOwner__)>"
) 然后,我有另一个指向员工记录的CKReference。它可能看起来像这样
"<CKReference: 0xa5bc330; 83a97165-2635-4bda-a7eb-fabf5a725bed:(_defaultZone:__defaultOwner__)>"请注意,此特定员工的引用在员工列表中,它们具有相同的引用名称,即“83a97165-2635-4bda-a7eb-fabf5a725bed”。
当我尝试使用下面的代码删除时
NSMutableArray<CKReference*>* employeeList = [[NSMutableArray alloc]initWithArray:self.employeeList];
if(employeeList != nil){
[employeeList removeObject:employeeReference];
}这不会从列表中删除引用,即使引用名称相同( contain方法也是如此)。
我认为removeObject使用isEqual: method作为标准,所以当比较两个CKReference时,它们实际上是比较地址,而不是基于字符串名称。
我是否应该重写isEqual实现来提供我自己的实现,以便从CKReference列表中删除给定的CKReference。
或者,有没有其他方法可以解决这个问题?
发布于 2016-12-22 15:20:03
您可以调用indexOfObjectPassingTest:并根据需要进行比较:
NSMutableArray <CKReference*>* employeeList = [[NSMutableArray alloc] init];
NSUInteger index = [employeeList indexOfObjectPassingTest:^BOOL(CKReference * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
return [obj.recordID.recordName isEqualToString:recordNameToRemove];
}];
if (index != NSNotFound) {
[employeeList removeObjectAtIndex:index];
}https://stackoverflow.com/questions/41232554
复制相似问题