如何将 NSArray 转换为 NSMutableArray

2024-04-11

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);  
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

NSMutableArray *tempPeoples=[[NSMutableArray alloc]init];

for(int i=0;i<nPeople;i++){

    ABRecordRef i1=CFArrayGetValueAtIndex(allPeople, i);
    [tempPeoples addObject:i1];

//  [peoples addObject:i1];

}// end of the for loop
peoples=[tempPeoples copy];

这段代码给出了异常 b/c 我想将 NSMutableArray 转换为 NSArray 请帮忙


主题为“如何转换NSArray to NSMutableArray”。为了得到一个NSMutableArray从一个NSArray,使用类方法NSMutableArray +arrayWithArray:.

您的代码不显示人民的声明。假设它被声明为NSMutableArray,如果你尝试这样对待它,你可能会遇到问题。当您将复制消息发送至NSMutableArray,你得到一个不可变的对象,NSArray,所以如果您尝试将对象添加到复制的NSMutableArray,你会得到一个错误。

CFArrayRef是免费桥接到NSArray,所以你可以这样简化你的代码:

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
//NSMutableArray *tempPeoples = [NSMutableArray arrayWithArray:(NSArray*)allPeople];
// even better use the NSMutableCopying protocol on NSArray
NSMutableArray *tempPeoples = [(NSArray*)allPeople mutableCopy];
CFRelease(allPeople);
return tempPeoples; // or whatever is appropriate to your code

在上面的代码中 tempPeoples 是一个自动释放的NSMutableArray准备好根据需要添加或删除对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 NSArray 转换为 NSMutableArray 的相关文章

随机推荐