removeObjectsInArray在它不应该返回时返回零数组

时间:2014-04-02 21:38:42

标签: ios arrays xcode zero

我遇到的问题是removeObjectsInArray返回一个零对象的数组。这两个数组的大小不同,首先是1。

以下代码创建了一个包含所有联系人电话号码的数组。

        NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary];

        ABRecordRef ref = CFArrayGetValueAtIndex(allPeopleMutable,i);
        ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty));

        for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {
        mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
        if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
        {
            [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
        }
        else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
        {
            [dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"];
            break ;
        }

    }

    [contactListNumbersArray addObject:[dOfPerson objectForKey:@"Phone"]];

然后我将此数组保存到拉取电话号码的函数外部的NSUserDefaults。因此,它不会立即每次都保存电话号码。

    userDefaultArray = contactListNumbersArray;
    [defaults setObject:userDefaultArray forKey:@"allContactsNumberArray"];

然后我进入手机上的地址簿并添加联系人。当它重新进入时,它意识到我保存的NSUserDefault不再与我的地址簿相同。它通过上面的代码重新定义了contactListNumbersArray(而不是NSUserDefault)。

然后我想确切地确定改变了什么,这就是我正在使用的代码。

        NSMutableArray *tempDiffArray = [[NSMutableArray alloc] init];

        tempDiffArray = [NSMutableArray arrayWithArray:contactListNumbersArray];

        [tempDiffArray removeObjectsInArray:userDefaultArray];

我让这个用于地址簿名称,但电话号码给我带来了问题。例如,1个数组的大小为403,另一个为402,最后我得到一个零数组。

1 个答案:

答案 0 :(得分:0)

方法removeObjectsInArray:将删除多次出现的相同值。您的代码适用于名称但未通过电话号码表示您有两个或多个具有相同编号的名称。