首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CNContactStore executeSaveRequest失败,并显示(CNErrorDomain错误2。)

CNContactStore executeSaveRequest失败,并显示(CNErrorDomain错误2。)
EN

Stack Overflow用户
提问于 2015-10-09 16:10:46
回答 1查看 1.1K关注 0票数 6

我正在尝试删除我的应用程序中的URL冗余。如果一个联系人有多个URL,这很有效。但是如果有链接的联系人,保存操作通常会失败,并显示消息"The operation But be completed. (CNErrorDomain error 2).“

有什么建议可以解决这个问题吗?它不能与统一联系人一起工作吗?如果URL删除应该在单个非统一项上单独进行,有没有方法可以从统一项中获得这些URL?

以下是代码的摘录:

代码语言:javascript
复制
CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];

NSArray* keys = @[CNContactUrlAddressesKey];
NSPredicate *predicate = [CNContact predicateForContactsWithIdentifiers:identifiers];
NSError *error;
NSArray <CNContact *> *contacts = [_contactStore unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];

for (CNContact *contact in contacts) {
 // here we'll collect non-ambigous URLs
  NSMutableArray<CNLabeledValue<NSString *> *> *copyOfURLs = [NSMutableArray array];
 // just a marker for the moment if a URL with specific prefix was already found
  NSString *baseURL = nil;
  for (CNLabeledValue<NSString *> *labeledValue in contact.urlAddresses) {
    NSString *url = labeledValue.value;
    if ([url hasPrefix:APP_IDENTITY_URL_SCHEME]) {
       if (baseURL == nil)
         baseURL = url;
       else
         continue;
     }
     [copyOfURLs addObject:labeledValue];
  }
  CNMutableContact *updatedContact = [contact mutableCopy];
  updatedContact.urlAddresses = copyOfURLs;
  [saveRequest updateContact:updatedContact];
}
NSError *saveError;
if (![_contactStore executeSaveRequest:saveRequest error:&saveError]) {
  NSLog(@"Saving error: %@", saveError.localizedDescription);
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-23 16:56:41

我知道这已经来不及回答了,但我也遇到了同样的问题,即CNContactStore executeSaveRequest失败(CNErrorDomain error 2.)遇到了这个悬而未决的问题。我解决了同样的问题,我用零字节数组设置了imageData。

我找到了这个问题的根本原因。如果上面的数组没有任何值,即0元素数组,那么这一行就会导致问题。

代码语言:javascript
复制
updatedContact.urlAddresses = copyOfURLs;

如果copyOfURLs中没有任何元素,甚至不要将updatedContact.urlAddresses设置为空(0元素)数组。

将上面的行替换为

代码语言:javascript
复制
if ([copyOfURLs length] > 0) {
  updatedContact.urlAddresses = copyOfURLs;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33033163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档