gpt4 book ai didi

iphone - ABAddressBook - 如何查找特定联系人是否从 iPhone 通讯录中被修改或删除?

转载 作者:行者123 更新时间:2023-12-03 18:40:11 27 4
gpt4 key购买 nike

我正在开发一个聊天应用程序。为此我需要保存联系人。因此,我将 ABAddressBook 中的所有联系人保存在我的核心数据实体中。问题是我如何知道联系人是否被修改或从 iPhone 的地址簿中删除?以便我从我的核心数据实体中修改或删除该联系人。

if ABRecordGetRecordID(person) can be used as unique key or not

下面给出的是在核心数据中添加联系人的代码。

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBookRef );
CFIndex nPeople = ABAddressBookGetPersonCount( addressBookRef );

for ( int i = 0; i < nPeople; i++ )
{
ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );
}

NSString* firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person,kABPersonFirstNameProperty);


if ([firstName hasPrefix:@"Protected by True"])
{
continue;
}
else if([firstName hasPrefix:@"Identified As Spam"])
{
continue;
}


NSString* lastName = (__bridge_transfer NSString*)ABRecordCopyValue(person,kABPersonLastNameProperty);

NSString *userEmail = nil;
ABMultiValueRef emailData = ABRecordCopyValue(person, kABPersonEmailProperty);
if(ABMultiValueGetCount(emailData) > 0) {
NSLog(@"email is:%@",(__bridge NSString *)ABMultiValueCopyValueAtIndex(emailData, 0));
userEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emailData, 0);
}

NSString* phone = nil;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,kABPersonPhoneProperty);
if (ABMultiValueGetCount(phoneNumbers) > 0)
{
for (int i=0; i<ABMultiValueGetCount(phoneNumbers); i++)
{
phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, i);



NSString *asciiCharacters = @"0123456789";
NSCharacterSet *nonAsciiCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:asciiCharacters] invertedSet];





NSString *stringPhone = [[phone componentsSeparatedByCharactersInSet:nonAsciiCharacterSet] componentsJoinedByString: @""];
NSString *str = stringPhone;
stringPhone = [str stringByReplacingOccurrencesOfString:@"^0+"
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, str.length)];






NSLog(@"modified %@", stringPhone);

NSString *phoneLabelLocalized;
CFStringRef labelStingRef = ABMultiValueCopyLabelAtIndex (phoneNumbers, i);
phoneLabelLocalized = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(labelStingRef);


if ([[PersistentStore getMyJID] rangeOfString:stringPhone].location != NSNotFound)
{
NSLog(@"my phone %@",stringPhone);
continue;
}

NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:appDelegate.managedObjectContext];
request.predicate = [NSPredicate predicateWithFormat:@"contactNumber = %@", stringPhone];
NSError *executeFetchError = nil;
Contact *contact = [[appDelegate.managedObjectContext executeFetchRequest:request error:&executeFetchError] lastObject];

if (!contact)
{
contact = (Contact *)[NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:appDelegate.managedObjectContext];
[contact setContactFirstName:firstName];
[contact setContactLastName:lastName];

if (firstName && lastName)
{
[contact setContactFullName:[NSString stringWithFormat:@"%@ %@",firstName,lastName]];
}
else if(firstName)
{
[contact setContactFullName:firstName];
}
else
{
[contact setContactFullName:lastName];

}
[contact setContactType:phoneLabelLocalized];
[contact setContactDate:[NSDate date]];
[contact setContactOriginalNumber:phone];
[contact setContactNumber:stringPhone];
[contact setContactEmail:userEmail];
[arrayContacts addObject:stringPhone];

}

}
}
CFRelease(phoneNumbers);


NSError *error;
if (![appDelegate.managedObjectContext save:&error])
{
// This is a serious error saying the record could not be saved.
// Advise the user to restart the application
}
}

最佳答案

ABAddressBookRegisterExternalChangeCallback 每本地址簿发生更改时都会给您回调。

ABRecordGetRecordID 为您提供地址簿条目的唯一标识符(范围仅限于设备,而不是全局唯一)。

这两件事足以让您检测到记录被修改和删除。

关于iphone - ABAddressBook - 如何查找特定联系人是否从 iPhone 通讯录中被修改或删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com