-1

嗨,我有一个功能,我将从书籍列表中收集名字姓氏和电话号码

- (void)getnames
{
    ABAddressBookRef addressBook = ABAddressBookCreate();

if (addressBook != nil)
{
    NSLog(@"Succesful.");

    NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

    NSUInteger i = 0;
    for (i = 0; i < [allContacts count]; i++)
    {
        ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];



        NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

        NSString *lastName =  (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);

        NSLog(@"FirstNAme::::: LastNAME::::::EMail:::  %@ %@",firstName,lastName);
        }

所以从上面的函数中,当我签入NSLog时,我得到了很多名字和姓氏列表。所以我的要求是如何以数组或列表的形式在下面的DisplayNames函数中显示所有名字和姓氏。所以谁能告诉我代码。我如何从上面的函数中收集所有名字和姓氏。

-(void)Displaynames
{
    }
4

4 回答 4

0

有一个自定义类作为“用户”,在其中声明名字、姓氏等属性。因此,在您的 getnames 方法中,创建自定义“用户”类的对象并分配相应的属性,最后将“用户”对象分配给全局可变数组。使用该数组并对其进行迭代以在您的 -(void)displayNames 方法中获取用户的所有详细信息。简单的。

PS 对方法声明使用正确的命名约定。

干杯!!

于 2013-05-31T06:52:06.077 回答
0

在 getNames 方法中......你有一个联系人数组......通过它你正在迭代和打印日志......为什么不将 getNames 方法的返回类型更改为 NSArray 并在 Displaynames 中使用相同的类型?

于 2013-05-31T06:45:33.593 回答
0

有2个选项:

首先,也是最简单的:

NSUInteger i = 0;
NSMutableArray *namelist = [NSMutableArray array];
    for (i = 0; i < [allContacts count]; i++)
    {
        ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];


NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

NSString *lastName =  (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
[namelist addObject:[NSString stringWithFormat:"%@ %@",firstName, lastName]];

[self Displaynames:namelist];
}

在显示名称处:

-(void)displaynames:(NSMutableArray*)names{
 for(NSString* name in names){
 NSLog(@"%@",name);
}
}

缺点是您不能使用分隔的名字/姓氏。如果您需要这个,请使用以下代码:

NSUInteger i = 0;
NSMutableArray *namelist = [NSMutableArray array];
    for (i = 0; i < [allContacts count]; i++)
    {
        ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];


NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

NSString *lastName =  (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
NSMutableArray *name = [NSMutableArray array];
[name addObject:firstName];
[name addObject:lastName];
[namelist addObject:name];

[self Displaynames:namelist];
}

和显示名称:

-(void)displaynames:(NSMutableArray*)names{
 for(NSMutableArray* name in names){
 NSLog(@"%@ %@",[name objectAtIndex:0],[name objectAtIndex:1]);
}
}

这段代码是写在我的浏览器中的,所以没有试过。

于 2013-05-31T06:52:43.080 回答
0

-(NSArray *)getnames { ABAddressBookRef addressBook = ABAddressBookCreate();

if (addressBook != nil) { NSLog(@"Succesful.");

NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

NSUInteger i = 0;
for (i = 0; i < [allContacts count]; i++)
{
    ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];



    NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

    NSString *lastName =  (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);

    NSLog(@"FirstNAme::::: LastNAME::::::EMail:::  %@ %@",firstName,lastName);
}   return allContacts; }

这样,您的数组中就有了所有的名字和姓氏,您可以在您的数组中使用这个数组

显示名称()

PS:在.h文件中声明allContacts

干杯!

于 2013-05-31T06:57:00.207 回答