簡體   English   中英

如何將一個NSMutablearray復制到另一個NSMutablearray?

[英]How to copy one NSMutablearray to another NSMutablearray?

我知道你們可能會覺得這是重復性的問題。 但是我在項目中搞砸了這個問題。 現在轉到問題,我采用了一個名為arr1NSMutableArray ,其中包含諸如@"34"@"40"等字符串值。 現在,我有了第二個NSMutableArray名為arr2 我已經嘗試過下面的代碼。

[arr1 initWithObjects:@"1",@"2", nil];
arr2 = [[[NSMutableArray alloc] initWithArray:arr1 copyItems:YES] autorelease];

然后,我嘗試

NSString  *no = [arr2 objectAtIndex:0];
tst.text = no; 

但是,它在文本框中沒有任何價值。
如果有可以幫助我的話,那將是很大的幫助。

[arr1 initWithObjects:@"1",@"2", nil];

毫無意義,您可能想要使用NSMutableArray

NSArray *arr1 = [NSArray arrayWithObjects:@"1",@"2", nil];
NSMutableArray *arr2 = [arr1 mutableCopy];

NSLog(@"arr1: %p, %@", arr1, arr1);
NSLog(@"arr2: %p, %@", arr2, arr2);

NSLog輸出:

arr1: 0x7924c50, (
                 1,
                 2
                 )
arr2: 0x7924f00, (
                 1,
                 2
                 )

您的arr1可能為零。 它應該是

arr1 = [[NSArray alloc] initWithObjects:@"1", @"2", nil];

您的arr1必須為nil否則將導致崩潰,但更arr1是您錯誤地創建了NSMutableArray

您實際上不應在單獨的行上進行allocinit

NSMutableArray *myArray = [NSMutableArray alloc];

NSLog(@"%@", [myArray class]);

//=> __NSPlaceholderArray  

在這種情況下, myArray指針指向的類型為__NSPlaceholderArray的flyweight,這很可能不是您想要的。 您希望:

---------------------------------------

myArray = [[NSMutableArray alloc] init];

NSLog(@"%@", [myArray class]);

//=> __NSArrayM

如果您確實擁有合法的NSMutableArray並使用以下命令調用initWithArray: ,也會使您崩潰:

[NSMutableArray initWithCapacity:]: method only defined for abstract class.

這是因為該方法最有可能在__NSPlaceholderArray定義

您是否正在使用創建arr2的相同方法嘗試[arr2 objectAtIndex:0]

也許問題是您在arr2上使用了autorelease 因此,在其他方法中,它可能會失去其價值。

我嘗試了以下方法,它對我有用:

NSMutableArray * arr1 = [[NSMutableArray alloc]initWithObjects:@"1", @"2", nil];
NSMutableArray * arr2 = [[[NSMutableArray alloc] initWithArray:arr1 copyItems:YES] autorelease];
NSString * no = [arr2 objectAtIndex:0];
NSLog(@"%@", no);

除了tia的答案:您需要先分配它。

方法“ mutableCopy”將創建數組的副本,而不是其中的元素的副本。 您可以使用'initWithArray:arr1 copyItems:YES'創建一個新的不可變數組,然后通過調用'mutableCopy'創建一個可變版本。

NSArray *arr1 = [[NSArray alloc] initWithObjects:@"1",@"2", nil];
NSMutableArray arr2 = [[[NSArray alloc] initWithArray: arr1 copyItems:YES] mutableCopy];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM