我想要创建一个ABRecordRef数组来存储具有有效生日字段的联系人。
NSMutableArray* bContacts = [[NSMutableArray alloc] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
for( int i = 0 ; i < nPeople ; i++ )
{
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i );
NSDate* birthdayDate = (NSDate*) ABRecordCopyValue(ref, kABPersonBirthdayProperty);
if (birthdayDate != nil){
[bContacts addObject:ref];
}
}编译器显示了这个警告:警告:传递'addObject:‘的参数1,从指针目标类型丢弃限定符,我搜索了web,发现我必须将ABRecordRef转换为ABRecord*才能存储在NSMutableArray中。
[bContacts addObject:(ABRecord*) ref];但ABRecord似乎不是iOS框架的一部分。现在我如何将ABRecordRef存储到NSMutableArray?
发布于 2011-05-20 11:40:20
[bContacts addObject:(id) ref];发布于 2011-05-20 11:56:19
ABRecordRef是CFTypeRef的类型--它反过来解析为const void *。这就是警告的来源:通过对addObject:的调用,const限定符“丢失”。
在这种情况下,我们知道这是可以的。CFTypeRef是一种半高级类型,这种类型的实例支持CFRetain和CFRelease。这反过来意味着将其转换为id并将其作为NSObject处理可能是可以的。因此,您应该能够简单地做到:
[bContacts addObject:(id)ref];发布于 2011-05-20 11:48:50
创建一个NSObject ABRecordRef商店,如下所示:
// ABContact.h
@interface ABContact : NSObject
{
ABRecordRef _record;
}
@property (nonatomic, readonly) NSDate *birthday;
- (id)initWithRecord:(ABRecordRef)aRecord;
@end
// ABContact.m
@implementation ABContact
#pragma mark - Init
- (id)initWithRecord:(ABRecordRef)aRecord;
{
if ((self = [super init]))
_record = CFRetain(aRecord);
return self;
}
#pragma mark - Getter
- (NSDate *)birthday
{
return (NSDate *)ABRecordCopyValue(record, kABPersonBirthdayProperty) autorelease];
}
#pragma mark - Memory management
- (void)dealloc
{
CFRelease(_record);
[super dealloc];
}
@end您应该看看Erica库,它是iPhone食谱的作者。下面是激发这段代码-> url的代码
https://stackoverflow.com/questions/6071256
复制相似问题