将NSMutableArray的内容替换为NSArray



我正在开发一个应用程序,该应用程序需要从服务器检索一些数据。我创建了一个"Server"类,它处理所有通信,并有一个NSMutableArray*sessionData变量,我想在其中存储来自服务器的数据(顺便说一句,这种方法正确吗?)。

我有NSArray中的数据。我希望NSMutableArray具有与NSArray相同的内容,但我没有找到任何方法来做到这一点(sessionData=requestResult)。

(子问题:在使用之前,我必须以某种方式初始化NSMutableArray吗?我只用@property和@synthesis声明了它)

您尝试的代码(来自注释)应该已经工作了。它不起作用的原因是您的sessionDatanil

您需要初始化您的sessionData-在初始化器中将其设置为[NSMutableArray array];然后你的代码

[sessionData removeAllObjects];
[sessionData setArray:result];

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

试试这个方法:

sessionData = [result mutableCopy];
[result release];

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

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

NSMutableArray *session = [NSMutableArray arrayWithArray:someArray];

1。这种方法正确吗

是的。

2.我没有找到任何方法(sessionData=requestResult)

正如许多人建议的那样,您可以使用mutableCopyrequestResult分配给sessionData或者,您可以使用arrayWithArray作为一个答案。

3.在使用之前,是否必须以某种方式初始化NSMutableArray

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

在您的示例中,类似于以下内容:

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

最新更新