2012-02-09 27 views
3

このコードスニペットをエミュレータで実行すると問題が発生します。グループのIDを取得しますが、デバイス上で実行すると-1が設定されます。エラーメッセージはnullのままです。ABGroupCreateがExchangeと連携していません

-(NSNumber *)addGroupeToAddressbookWithName:(NSString *)name{ 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFErrorRef error = NULL; 
    ABRecordRef group = ABGroupCreate(); 
    ABRecordSetValue(group, kABGroupNameProperty,(__bridge CFStringRef)name, &error); 
    ABAddressBookAddRecord(addressBook, group, &error); 
    ABAddressBookSave(addressBook,&error); 
    NSNumber *gId = [NSNumber numberWithInt:ABRecordGetRecordID(group)]; 

    CFRelease(group); 
    return gId; 
} 

私は違いが何であり、どのように実際のデバイスで動作させるのか分かりません。

EDIT:電話機で交換機の同期を削除しても、交換機のアカウントを携帯電話で使用できるようにしても機能することが判明しました。 Obtaining Specific ABSource from ABAddressBook in iOS 4+

:だから本当に

EDIT /交換は見るも、適切なソースを使用するために必要とされるグループを保存するために、グループを知らないので、それがあったことが判明

回答問題を解決しませ

新しいコード:

交換も参照、適切なソースを使用するために必要とされるグループを保存するために、グループについて知らないので、それがあることがわかった
-(NSNumber *)addGroupeToAddressbookWithName:(NSString *)name{ 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFErrorRef error = NULL; 
    CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook); 
    CFIndex sourceCount = CFArrayGetCount(sources); 
    NSNumber *gId = nil; 
    for (CFIndex i = 0 ; i < sourceCount; i++) { 
     ABRecordRef currentSource = CFArrayGetValueAtIndex(sources, i); 
     CFTypeRef sourceType = ABRecordCopyValue(currentSource, kABSourceTypeProperty); 

     BOOL isMatch = kABSourceTypeLocal == [(__bridge NSNumber *)sourceType intValue]; 
     CFRelease(sourceType); 

     if (isMatch) { 
      ABRecordRef group = ABGroupCreateInSource(currentSource);//ABGroupCreate(); 
      ABRecordSetValue(group, kABGroupNameProperty,(__bridge CFStringRef)name, &error); 
      ABAddressBookAddRecord(addressBook, group, &error); 
      ABAddressBookSave(addressBook,&error); 
      gId = [NSNumber numberWithInt:ABRecordGetRecordID(group)]; 
      CFRelease(group); 
      CFRelease(currentSource); 
      break; 
     } 
    } 

    CFRelease(sources); 
    return gId; 
} 

答えて

4

Obtaining Specific ABSource from ABAddressBook in iOS 4+

新しいコード:

-(NSNumber *)addGroupeToAddressbookWithName:(NSString *)name{ 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFErrorRef error = NULL; 
    CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook); 
    CFIndex sourceCount = CFArrayGetCount(sources); 
    NSNumber *gId = nil; 
    for (CFIndex i = 0 ; i < sourceCount; i++) { 
     ABRecordRef currentSource = CFArrayGetValueAtIndex(sources, i); 
     CFTypeRef sourceType = ABRecordCopyValue(currentSource, kABSourceTypeProperty); 

     BOOL isMatch = kABSourceTypeLocal == [(__bridge NSNumber *)sourceType intValue]; 
     CFRelease(sourceType); 

     if (isMatch) { 
      ABRecordRef group = ABGroupCreateInSource(currentSource);//ABGroupCreate(); 
      ABRecordSetValue(group, kABGroupNameProperty,(__bridge CFStringRef)name, &error); 
      ABAddressBookAddRecord(addressBook, group, &error); 
      ABAddressBookSave(addressBook,&error); 
      gId = [NSNumber numberWithInt:ABRecordGetRecordID(group)]; 
      CFRelease(group); 
      CFRelease(currentSource); 
      break; 
     } 
    } 

    CFRelease(sources); 
    return gId; 
} 
関連する問題