2011-08-22 4 views
2

AdressBook에 관계없이 ABRecordRefContent을 내 애플리케이션에 저장하고 싶습니다. 그 권리를 가지고있는 경우NSObject를 빌드하여 ABRecordRef 데이터를 저장하십시오.

은, 하나는 NSCoding이 기능 initWithABRecordRefgetABRecordRefFromPeopleDataABRecordRef의 모든 값과 적어도 NSObject 서브 클래스를 준수해야합니다 (가정 : 유래와 애플 개발자 사이트를 통해 crossreading 후 나는 이것이 가장 좋은 방법 발견 하나는 그의 클래스 peopleData를 명명하고, initWithABRecordRefABRecordRef (null이 아닌 경우)의 모든 값을 자체 클래스의 인스턴스로 채우고 getABRecordRefFromPeopleData은 자신의 클래스 인스턴스에 저장된 데이터로 ABRecordRef 은폐 데이터 형식을 반환합니다. 그것

내 질문은 :

궁금 거기에 누군가가 이미 내가 상상할 수 있기 때문에, 다른 사람들이 전에 똑같은 문제에 온 것을 한 경우. 만약 그렇다면, 그 수업을 손에 넣는 것은 새로운 일이 될 것입니다. 그렇지 않다면, 제가 스스로 시도하고 싶다면 여기에 결과를 올려야합니다. 어쩌면 당신은 더 나은 방법을 알 수 있습니까?

솔루션을 구현 한 경우 공유하십시오. 당신이 같은 것을 필요로한다면, 나는 그것을 함께 해결해 주셔서 감사합니다.

편집 : 나는 지금 내가 몇 가지 불분명 한 문제에 달렸다 (내가 예상 한대로) 물건과 작업을 시작

. kABStringPropertyType 가치에 관해서는 내 개념이 꽤 직설적입니다. 작은 예 :

@implementation RealRecord 
@synthesize firstName; //NSString 

- (id)initWithRecordRef:(ABRecordRef)record{ 

    //Single valued entrys 
    NSString *contactName = (NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty); 
    firstName=contactName; 
    [contactName release]; 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder{ 
    //single value entrys 
    self.firstName=    [aDecoder decodeObjectForKey:@"firstName"]; 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)aCoder{ 
    [aCoder encodeObject:firstName forKey:@"firstName"]; 
} 

- (ABRecordRef)returnABRecordRefFromRealRecord{ 
    ABRecordRef returnRecord =ABPersonCreate(); 
    ABRecordSetValue(returnRecord, kABPersonFirstNameProperty, firstName, NULL); 
    return returnRecord; 
} 

잘 작동합니다. 이제 나에게 NSMutableArray 이메일 목록 만든 kABMultiStringPropertyType .I과 같은 일을 수행하는 방법에 너무 확실하지 메신저와 같은했다 :

이제
- (id)initWithRecordRef:(ABRecordRef)record{ 

    //Multi valued entrys 
ABMutableMultiValueRef email=ABRecordCopyValue(record, kABPersonEmailProperty); 
for (int i = 0; i < ABMultiValueGetCount(email); i++) { 
    NSString *anEmail = [(NSString*)ABMultiValueCopyValueAtIndex(email, i) autorelease]; 
    [emailList addObject:anEmail]; 
} 
return self; 
} 

이 방법에 작업의 나머지 부분을 수행하는, 슈어하지 메신저 다중 값. 난 그냥 문자열로 한 것처럼 NSMutableArray 인코딩하고 디코딩 할 수 또는 모든 전자 메일에 대한 키를 설정해야합니까 emailList?

내가 어떻게 returnRecord에 망할 건가요?

답변

0

libsqlite3.dylib를 사용하여 모든 속성에 대해 생성 된 플랫 파일에 액세스하는 SQL 데이터베이스를 만듭니다.

sqlite3를 라이브러리와 샘플 아이폰 OS 프로젝트는 여기에 있습니다 :

http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application

& 상세 여기에 상대의 다중 값 속성 ABAddressbook와 이렇게에 :

http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html