gpt4 book ai didi

ios - 在 objective-c 中使用联系人框架时无法在 TableView 中显示联系人缩略图

转载 作者:行者123 更新时间:2023-11-29 00:32:06 24 4
gpt4 key购买 nike

我正在使用 UITableView 来显示手机联系人的详细信息,例如全名、电话号码和个人资料图片。下面是代码

- (void)viewDidLoad {
[super viewDidLoad];
[self fetchContactsandAuthorization];



[_selectContactListTblView reloadData];
}


-(void)fetchContactsandAuthorization
{
// Request authorization to Contacts
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted == YES)
{
//keys with fetching properties
NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];
NSString *containerId = store.defaultContainerIdentifier;
NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
NSError *error;
NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];

NSLog(@"new %@",cnContacts);

if (error)
{
NSLog(@"error fetching contacts %@", error);
}
else
{
NSString *phone;
NSString *fullName;
NSString *firstName;
NSString *lastName;
UIImage *profileImage;
NSMutableArray *contactNumbersArray = [[NSMutableArray alloc]init];
for (CNContact *contact in cnContacts) {
// copy data to my custom Contacts class.
firstName = contact.givenName;
lastName = contact.familyName;

if (lastName == nil) {
fullName=[NSString stringWithFormat:@"%@",firstName];
}else if (firstName == nil){
fullName=[NSString stringWithFormat:@"%@",lastName];
}
else{
fullName=[NSString stringWithFormat:@"%@ %@",firstName,lastName];
}

UIImage *image = [UIImage imageWithData:contact.imageData];

if (image != nil) {
profileImage = image;
}else{
profileImage = [UIImage imageNamed:@"person-icon.png"];
}


for (CNLabeledValue *label in contact.phoneNumbers) {
phone = [label.value stringValue];
if ([phone length] > 0) {
[contactNumbersArray addObject:phone];
}
}
NSDictionary* personDict = [[NSDictionary alloc] initWithObjectsAndKeys: fullName,@"fullName",profileImage,@"userImage",phone,@"PhoneNumbers", nil];
NSLog(@"persondictfull %@",personDict);
NSLog(@"persondictp %@",[personDict objectForKey:@"PhoneNumbers"]);
[contactFullNameArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"fullName"]]];
[contactPhoneNumberArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"PhoneNumbers"]]];
[contactImgPathArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"userImage"]]];
NSLog(@"contactImg - %@",contactImgPathArr);
}
dispatch_async(dispatch_get_main_queue(), ^{
[_selectContactListTblView reloadData];
});
}
}
}];
}

作为引用,这是在 contactImg 日志中生成的内容

 contactImg -  (
"<UIImage: 0x7b935760>, {196, 199}",
"<UIImage: 0x7b77b1e0>, {196, 199}",
"<UIImage: 0x7b6d48a0>, {196, 199}",
"<UIImage: 0x7b6d4b40>, {196, 199}",
"<UIImage: 0x7b87d8e0>, {196, 199}",
"<UIImage: 0x7b87d950>, {3000, 2002}",
"<UIImage: 0x7b77b730>, {196, 199}",
"<UIImage: 0x7b77b9a0>, {196, 199}",
"<UIImage: 0x7b6d4c90>, {196, 199}",
"<UIImage: 0x7b87df10>, {196, 199}",
"<UIImage: 0x7b6d54a0>, {196, 199}",
"<UIImage: 0x7b9334c0>, {196, 199}"
)




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SelectContactTableViewCell";

SelectContactTableViewCell *cell = (SelectContactTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SelectContactTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}

cell.contactFullName.text = [contactFullNameArr objectAtIndex:indexPath.row];


//tried by directly assigning the value but no use
cell.contactProfileImage.image = [contactImgPathArr objectAtIndex:indexPath.row];



//if i assign any static image i am able to see the image
// cell.contactProfileImage.image = [UIImage imageNamed:@"person-icon.png"];
cell.contactPhoneNumber.text = [contactPhoneNumberArr objectAtIndex:indexPath.row];

return cell;
}

refernece 的屏幕截图,我在其中获取全名和电话号码详细信息但没有缩略图 enter image description here

我尝试了很多但无法找出问题所在。任何帮助将不胜感激。

最佳答案

您有一些问题。主要问题从这里开始:

[contactImgPathArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"userImage"]]];

personDict[@userImage"] 是一个 UIImage。出于某种原因,您从图像的 description 方法创建一个字符串并将其存储为无用的contactImgPathArr 中的字符串。

稍后,您试图通过传入图像的描述来滥用 UIImage imageNamed:

所以你需要两个改变。首先,改变:

[contactImgPathArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"userImage"]]];

到:

[contactImgPathArr addObject:[personDict objectForKey:@"userImage"]];

(更好的是:)

[contactImgPathArr addObject:personDict[@"userImage"]];

然后更改:

cell.contactProfileImage.image = [UIImage imageNamed:[contactImgPathArr objectAtIndex:indexPath.row]];

到:

cell.contactProfileImage.image = [contactImgPathArr objectAtIndex:indexPath.row];

(更好:)

cell.contactProfileImage.image = contactImgPathArr[indexPath.row];

顺便说一句 - 您使用 personDict 也是毫无意义的。

这段代码:

NSDictionary* personDict = [[NSDictionary alloc] initWithObjectsAndKeys: fullName,@"fullName",profileImage,@"userImage",phone,@"PhoneNumbers", nil];
[contactFullNameArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"fullName"]]];
[contactPhoneNumberArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"PhoneNumbers"]]];
[contactImgPathArr addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"userImage"]]];

应该简单地是:

[contactFullNameArr addObject:fullName];
[contactPhoneNumberArr addObject:phone];
[contactImgPathArr addObject:profileImage];

当您可以简单地使用 someStringValue 时,切勿使用 [NSString stringWithFormat:@"%@", someStringValue]

关于ios - 在 objective-c 中使用联系人框架时无法在 TableView 中显示联系人缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com