获取地址簿的子数组

问题描述:

我试图从地址簿中获取第一个100个联系人。 我所做的是获取所有联系人,然后尝试只获得前100个。由于某种原因,不起作用(代码如下)。获取地址簿的子数组

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(addressBook); 

NSRange theRange; 
theRange.location = 0; 
theRange.length = 100; 

CFArrayRef allContactsNew = (CFArrayRef)[(NSMutableArray *)allContacts subarrayWithRange:theRange];//This gets an error 

希望能在这里得到帮助。此外,如果您知道任何其他方法只能从地址簿中直接获取前100个,这可能会非常有帮助。

+1

有什么错误? – 2012-08-03 16:44:37

+0

某些运行时错误。无论如何SSteve解决这个问题。谢谢! – Idan 2012-08-03 21:27:31

它工作正常,当我做这些改变:

theRange.length = MIN(100, CFArrayGetCount(allContacts)); //avoid array out of bounds errors 

CFArrayRef allContactsNew = CFBridgingRetain([(NSArray *)CFBridgingRelease(allContacts) subarrayWithRange:theRange]); //Add CFBridging functions recommended by Xcode 
+0

完美的作品,应该提到的一点是,这一行发布“allContacts”。 谢谢! – Idan 2012-08-03 21:26:38

+0

我不得不说,我不熟悉CFBridgingRetain/CFBridgingRelease的东西。我只是把它们放进去,因为程序不会另外编译,而Xcode的修复程序会将它们放入我的系统中。那可能是因为我有ARC,而你没有。如果你的问题是数组边界问题,你应该决定是否CFBridgingRetain/CFBridgingRelease语句适合你。 – SSteve 2012-08-03 22:45:29

+0

界限不是问题。不管怎样,谢谢。 – Idan 2012-08-04 02:06:00