recordID를 기반으로 사람의 ABAddressBook 속성에 액세스하려고 시도 할 때마다 속성을 가져 오려고 할 때마다 널값을 얻습니다.알 수있는이 블록의 실행 완료
이것은 내가 시도한 코드입니다.
ABAddressBookRef addressBook = NULL;
addressBook = ABAddressBookCreateWithOptions(addressBook, nil);
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID) [[object valueForKey:@"recordId"] description]);
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSLog(@"First Name %@", firstName);
NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
NSString *name = [NSString stringWithFormat:@"%@" "%@", lastName, firstName];
NSLog(@"Full Name %@", name);
여기서 내가 뭘 잘못하고 있니?
편집 : 위의 문제를 파악했습니다. 이것이 내가 사용한 것입니다. 지금 문제는이 코드 블록이 실행 완료 될 때만 UITableView를 다시로드해야한다는 것입니다. 그러나이 블록이 언제 실행을 완료하는지 알아낼 수는 없습니다. 도움이 필요하다.
CFErrorRef myError = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &myError);
ABAddressBookRequestAccessWithCompletion(addressBook,
^(bool granted, CFErrorRef error) {
if (granted) {
ABRecordID recID = [recordId intValue];
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, recID);
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
if(!firstName){
firstName = @"";
}
if(!lastName){
lastName = @"";
}
NSString *name = [NSString stringWithFormat:@"%@ %@", lastName, firstName];
if([firstName length] < 1 && [lastName length] < 1){
name = @"No Name";
}
self.personName = name;
NSData *imageData = (NSData *)CFBridgingRelease(ABPersonCopyImageData(person));
if(imageData){
self.personImage = [UIImage imageWithData:imageData];
}
else{
self.personImage = [UIImage imageNamed:@"default.png"];
}
NSMutableArray *array = [NSMutableArray array];
[array addObject:self.personName];
[array addObject:self.personImage];
[self.personDetailsArray addObject:array];
[self.tableView reloadData];
} else {
// Handle the error
}
});
블록 내부의 UI 요소를 업데이트하는 중 올바른 방법은 무엇입니까? 그렇지 않으면 대체 무엇입니까.
내가 갖고 싶은 것은 내 UITableView가 블록 실행 후에 만로드/업데이트되도록하는 것입니다. 아직 도움이되는 것이 없습니다.
'사람'개체가 처음에 유효한 개체입니까? –
아니요 사람 개체가 유효하지 않습니다. 하지만 내가 뭘 잘못하고있어? –