用NSArray替换NSMutableArray的内容

3
我正在开发一个需要从服务器检索一些数据的应用程序。我已经创建了一个“Server”类来处理所有通信,并有一个NSMutableArray *sessionData变量,我想在其中存储来自服务器的数据(顺便问一下,这种方法正确吗?)。
我将数据放在NSArray中。我希望NSMutableArray具有与NSArray相同的内容,但我没有找到任何方法来实现这一点(sessionData = requestResult)。
(副问题:在使用之前我是否必须以某种方式初始化NSMutableArray?我只是用@property和@synthesize声明了它)。

我已经尝试过这个,但是没有起作用:[sessionData removeAllObjects]; [sessionData setArray:result]; - Antonio Madonna
5个回答

5
你尝试的代码(来自评论)本该有效。但由于你的sessionDatanil,因此无法运行。
在初始化程序中需要对sessionData进行初始化 - 将其设置为[NSMutableArray array],然后再运行你的代码。
[sessionData removeAllObjects];
[sessionData setArray:result];

这将完美地工作。你甚至不需要第一行 - 第二行替换sessionData的内容为result的内容。


谢谢。这段代码在初始化时(从我的类的init方法中)是否好用?self->sessionData = [[NSMutableArray alloc] init]; - Antonio Madonna
@anthmad 是的,这个初始化代码应该可以工作。如果你不在ARC上,请考虑将其分配给属性,而不是它的后备ivar;如果你在ARC上,那就无所谓了。 - Sergey Kalinichenko

4
尝试这种方式:
sessionData = [result mutableCopy];
[result release];

或者

NSMutableArray *sessionData = [[NSMutableArray alloc] initWithContentsOfArray:result];

0

1. 这种方式正确吗?

是的。

2. 我没有找到任何方法来实现这个(sessionData = requestResult)

像许多人建议的那样,您可以使用mutableCopyrequestResult赋值给sessionData,或者您可以像一个答案建议的那样使用arrayWithArray

3. 在使用NSMutableArray之前,我需要进行某些初始化吗?

是的。如果您要更改任何变量,则必须为其分配内存。


0

或者,如果你能做到这一点:

NSMutableArray *session = [NSMutableArray arrayWithArray:someArray];

0
在你的例子中,类似这样:
NSArray *requestData = [[NSArray alloc] initWithObjects:@"3", @"4", @"5", nil];
_sessionData = [[NSMutableArray alloc] initWithArray:requestData];
[requestData release];

NSLog(@"%@", [sessionData objectAtIndex:0]); // 2012-03-30 15:53:39.446 <app name>[597:f803] 3
NSLog(@"count: %d", [sessionData count]); //2012-03-30 15:53:39.449 <app name>[597:f803] count: 3

1
sessionData是一个属性,我需要从其他方法中访问。你的代码会创建一个本地可变数组吗? - Antonio Madonna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接