2016-12-19 4 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」を持っています。

参照名が同じであっても、私はリストから参照を削除しないであろう

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

この下のコードを使用して除去しようとすると(同じcontain方法に起こります)。

removeObjectisEqual: methodを基準に使用していると思いますので、2つのCKReferenceを比較すると、実際にはアドレスが比較されますが、文字列名には基づいていません。

isEqualの実装を上書きして、CKReferenceのリストから特定のCKReferenceを削除するために自分自身を提供する必要があります。

これには代替方法がありますか?

答えて

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]; 
} 
関連する問題