我正在开发一个应用程序,该应用程序需要从服务器检索一些数据。我创建了一个"Server"类,它处理所有通信,并有一个NSMutableArray*sessionData变量,我想在其中存储来自服务器的数据(顺便说一句,这种方法正确吗?)。
我有NSArray中的数据。我希望NSMutableArray具有与NSArray相同的内容,但我没有找到任何方法来做到这一点(sessionData=requestResult)。
(子问题:在使用之前,我必须以某种方式初始化NSMutableArray吗?我只用@property和@synthesis声明了它)
您尝试的代码(来自注释)应该已经工作了。它不起作用的原因是您的sessionData
是nil
。
您需要初始化您的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)
正如许多人建议的那样,您可以使用mutableCopy
将requestResult
分配给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