2016-12-19 2 views
1

를 사용하여 CKReferenceList에서 CKReference을 제거하는 데 실패, 뭔가 그런 다음 나는 직원 레코드를 가리키는 또 다른 CKReference이이내가 직원의 목록에 대한 CKReferenceList이 CKRecord removeObject

(
    "<CKReference: 0xa5bc930; 83a97165-2635-4bda-a7eb-fabf5a725bed:(_defaultZone:__defaultOwner__)>", 
    "<CKReference: 0xa50a2e0; 9B7F4269-D8BA-4CE9-9BCF-AD2047B73EB5:(_defaultZone:__defaultOwner__)>" 
) 

처럼 보일 수 있습니다. 이 특정 직원의 참조가 직원 목록에 있음이

"<CKReference: 0xa5bc330; 83a97165-2635-4bda-a7eb-fabf5a725bed:(_defaultZone:__defaultOwner__)>" 

공지 사항처럼 보일 수있는, 그들은 동일한 참조 이름, 즉 "83a97165-2635-4bda-a7eb-fabf5a725bed"가.

기준 이름이 동일하더라도 I리스트에서 참조 삭제되지

NSMutableArray<CKReference*>* employeeList = [[NSMutableArray alloc]initWithArray:self.employeeList]; 
    if(employeeList != nil){ 
     [employeeList removeObject:employeeReference]; 
    } 

이 아래의 코드를 사용하여 제거하려 할 때 (동일 contain 방법에 일어난다).

removeObjectisEqual: method을 기준으로 사용하므로 두 개의 CKReference를 비교할 때 실제로 주소를 비교하지만 문자열 이름을 기반으로하지는 않습니다.

CKReference 목록에서 주어진 CKReference를 제거하기 위해 isEqual 구현을 그냥 덮어 써야합니까?

아니면 다른 대안이 있습니까?

답변

0

당신은 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]; 
}