首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将NSArray转换为NSMutableArray

如何将NSArray转换为NSMutableArray
EN

Stack Overflow用户
提问于 2010-12-31 18:14:17
回答 2查看 41.4K关注 0票数 22
代码语言:javascript
复制
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请帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-31 19:54:30

主题是“如何将NSArray转换为NSMutableArray”。要从NSArray获取NSMutableArray,请使用NSMutableArray +arrayWithArray:上的类方法。

您的代码没有显示peoples的声明。假设它被声明为NSMutableArray,如果您试图这样对待它,您可能会遇到问题。当您将复制消息发送到NSMutableArray时,您会得到一个不可变的对象NSArray,因此,如果您试图将对象添加到复制的NSMutableArray中,您将会得到一个错误。

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

代码语言:javascript
复制
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,您可以根据需要添加或删除对象。

票数 42
EN

Stack Overflow用户

发布于 2017-11-27 19:09:38

很简单,你可以做到这一点

代码语言:javascript
复制
NSArray *yourArray ; // Static Array
NSMutableArray* subArrayData = [yourArray mutableCopy];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4569478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档