2013-05-15 2 views
2

에서 시뮬레이터 작동하지에 접촉을 추가하면 오류를 제공하지 않습니다하지만 접촉은 접촉 을에 특정 그룹에 반영되지 않습니다 하지만 오류 체를 사용하여 시작하는 것이 도움이 될 것입니다아이폰 : 그룹이 장치에서 작동하지만 그룹이 장치에서 작동하지만 ABAddressbook 에서 시뮬레이터 작동하지에 연락처 추가 ABAddressbook

if (person) { 
      ABAddressBookAddRecord(addressBook, person, nil); 

      ABAddressBookSave(addressBook, &error); 

      BOOL isADDED = ABGroupAddMember(groupNameRef, person, &error); 

      NSError *error1 = (__bridge_transfer NSError *)error; 

      NSLog(@"Reason = %@", error1.localizedFailureReason); 
      BOOL iSSaved = ABAddressBookSave(addressBook, &error); 
} 

이 시뮬레이터에 잘하지만 장치

+0

오류 검사가 모두 잘못되었습니다. 문제를 해결 한 다음이 정보를 사용하여 장치의 문제점을 파악합니다. – matt

+0

오류가 Null을 인쇄합니다. 하지만 시뮬레이터에는 아무런 문제가 없습니다. –

+0

오류 검사가 모두 잘못되었으므로 오류가 인쇄됩니다. – matt

답변

2

에서 작동이 코드를 사용하고

시뮬레이터에서 잘 작동 올바르게 cking. 다음은 오류 검사 루틴의 구조입니다.

if (person) { 
    bool ok; 
    CFErrorRef err = nil; 
    ok = ABAddressBookAddRecord(addressBook, person, &err); 
    if (!ok) { 
     NSLog(@"%@", err); 
     return; 
    } 
    ok = ABAddressBookSave(addressBook, &err); 
    if (!ok) { 
     NSLog(@"%@", err); 
     return; 
    } 
    ok = ABGroupAddMember(groupNameRef, person, &err); 
    if (!ok) { 
     NSLog(@"%@", err); 
     return; 
    } 
    ok = ABAddressBookSave(addressBook, &err); 
    if (!ok) { 
     NSLog(@"%@", err); 
     return; 
    } 
} 

여기서 패턴을 확인하십시오. 이 함수는 bool을 반환합니다. 저 멍청이를 살펴 봐. false 인 경우 간접 참조로 반환 된 오류를 검사합니다. 이 패턴을 올바르게 따르면, 잘못된 점에 대해 더 나은 정보를 얻을 수 있습니다.

수정 : 연락처 데이터베이스에 실제로 액세스 할 수 있는지 확인하십시오. 내가하고 있다고 가정하고 있지만 시뮬레이터와 장치의 주요 차이점은 시뮬레이터가 자동으로 액세스 권한을 부여하는 반면 장치에 액세스 요청 대화 상자 (ABAddressBookRequestAccessWithCompletion 호출)가 있어야한다는 것입니다. 액세스 및 연락처 데이터베이스 작업 시도가 자동으로 실패합니다.