Добавление NSMutableArray A к NSMutableArray B, а затем выполнение «removeAllObjects» для A тоже очищает B? - PullRequest
0 голосов
/ 17 мая 2011
A = bookmarkArray
B = issueArray              
[issueArray addObject:bookmarkArray];
[bookmarkArray removeAllObjects];

Почему из-за этого IssueArray остается пустым, и что я могу сделать, чтобы удостовериться, что у меня все еще есть заполняемая проблема, когда bookmarkArray очищается?

Ответы [ 4 ]

4 голосов
/ 17 мая 2011

Это потому, что когда вы вызываете addObject, он добавляет ссылку, а не копию объекта. И, таким образом, любое изменение в исходном объекте будет отражено в ссылке, хранящейся в массиве. Если вы хотите сохранить копию объекта, сделайте его копию и сохраните в массиве.

NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
3 голосов
/ 17 мая 2011

Вы добавляете bookmarkArray непосредственно в IssueArray.Итак, IssueArray - это массив, содержащий один объект, который является массивом bookmarkArray.Если вы изменяете bookmarkArray, тогда вы изменяете объект в IssArray.

Если вы хотите добавить все объекты, находящиеся в настоящее время в bookmarkArray, в IssueArray, то я бы посоветовал:возьмите копию bookmarkArray и добавьте ее в IssueArray, тогда я бы предложил то же самое, что уже предложил taskinoor:

NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];

Или:

NSMutableArray *bookmarkCopy = [bookmarkArray copy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];

Если вам не нужнокопия должна быть изменяемой.

0 голосов
/ 17 мая 2011

Пояснения Томми и Таскинора прямо на деньги.Однако, если ваша цель состоит в том, чтобы IssueArray содержал объекты, которые находятся в bookmarkArray, сделайте следующее:

[issueArray addObjectsFromArray:bookmarkArray];
[bookmarkArray removeAllObjects];

Убедитесь, что вы четко понимаете разницу.В коде taskinoor вы добавляете один объект в bookmarkArray, и этот объект сам является массивом.В вышеприведенных строках вы добавляете [bookmarkArray count] объекты в IssueArray.

0 голосов
/ 17 мая 2011

Весьма вероятно, что они могут ссылаться на одни и те же объекты. Можете ли вы проверить, если они?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...