2012-03-30 74 views
3

我正在研究需要從服務器檢索一些數據的應用程序。我創建了一個「服務器」類來處理所有的通信,並有一個NSMutableArray * sessionData變量,我想存儲來自服務器的數據(順便說一下,這種方法是否正確?)。用NSArray替換NSMutableArray的內容

我有一個NSArray中的數據。我希望NSMutableArray擁有與NSArray相同的內容,但我沒有找到任何方法來做到這一點(sessionData = requestResult)。

+0

我試過這個,但沒有工作:[sessionData removeAllObjects]; [sessionData setArray:result]; – 2012-03-30 12:44:05

回答

4

嘗試這種方式(subquestion?我必須在使用前以某種方式初始化NSMutableArray裏,我只用@property和@synthesize宣佈它):

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

或者

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

您嘗試的代碼(來自評論)應該已經工作。它沒有工作的原因是您的sessionDatanil

您需要初始化您的sessionData - 在初始化程序中將其設置爲[NSMutableArray array];那麼你的代碼

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

將完美工作。您甚至不需要第一行 - 第二個sessionData的內容替換爲的內容與result的內容。

+0

謝謝。這段代碼是否適合初始化它(從我的類的init方法)? self> sessionData = [[NSMutableArray alloc] init]; – 2012-03-30 12:55:33

+0

@anthmad是的,這個初始化代碼應該工作。如果你不在ARC,考慮分配給一個財產,而不是它支持伊娃;如果你在ARC上,那沒關係。 – dasblinkenlight 2012-03-30 12:57:40

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是我需要從其他方法訪問的屬性。你的代碼將創建一個本地可變數組? – 2012-03-30 13:06:11

+0

你有一點,發佈是更新:) – h4cky 2012-03-30 13:11:33

0

1是這種做法是否正確?

是的。

2.我沒有找到任何方式做到這一點(sessionData = requestResult)

正如許多人建議你可以使用mutableCopy分配requestResultsessionData 或者你可以使用arrayWithArray作爲一個答案提示。

3.我必須在使用前以某種方式初始化NSMutableArray嗎?

是的。如果你正在改變任何變量,它必須分配內存。