2012-08-03 74 views
0

我試圖從地址簿中獲取第一個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

回答

1

它工作正常,當我做這些改變:

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