Скопируйте NSMutablearray в другой - PullRequest
5 голосов
/ 13 января 2010

Я пытаюсь скопировать NSMutableArray в другой, но он ничего не показывает на UITableView:

NSMutableArray *objectsToAdd= [[NSMutableArray alloc] initWithObjects:@"one",@"two"];

NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:objectsToAdd,nil];

NSMutableArray *list = [[NSMutableArray alloc] init];

[self.list addObjectsFromArray:myArray];

Ничего не показывай! Что не так?

Это приводит к сбою моего приложения, потому что у меня нет nil на моем NSMutableArray, как я могу добавить к нему nil? addobject:nil не работает, приложение вылетает:

static NSString * DisclosureButtonCellIdentifier = 
@"DisclosureButtonCellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
                         DisclosureButtonCellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier: DisclosureButtonCellIdentifier]
            autorelease];
}
NSUInteger row = [indexPath row];

NSString *rowString =nil;

rowString = [list objectAtIndex:row];


cell.textLabel.text = rowString;

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
[rowString release];
return cell;

Ответы [ 4 ]

19 голосов
/ 13 января 2010

Ваш первоначальный вызов для выделения NSMutableArray, скорее всего, завершится сбоем, поскольку в вашем списке аргументов нет терминатора nil.

Кроме того, у вас есть локальная переменная list и свойство list. Убедитесь, что вы воплощаете то, что вы думаете. Возможно, вам придется сделать это:

NSMutableArray *objectsToAdd= [[NSMutableArray alloc] initWithObjects:@"one",@"two", nil];

NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:objectsToAdd,nil];

self.list = [[NSMutableArray alloc] init];

[self.list addObjectsFromArray:myArray];
2 голосов
/ 02 июля 2015

Это может помочь вам:

NSMutableArray *result  = [NSMutableArray arrayWithArray:array];

или

NSMutableArray *result = [array mutableCopy]; //recommended
1 голос
/ 13 января 2010

Есть несколько проблем ... Одной из проблем является то, что вы используете 'initWithObjects' и добавляете предыдущий массив. Это выглядит как нежелательное поведение, так как вы, скорее всего, захотите добавить строки @ "one" и @ "two" в массив. Скорее всего, вы намеревались использовать initWithArray или addObjectsFromArray. (Делая это так, как вы, добавите NSMutableArray (не его объекты) в список)

Вторая проблема, когда вы используете initWithObjects, вам нужно перечислить каждый из объектов, а затем завершить список нулевым значением. ( документы ) Другими словами, вам нужно использовать ...

NSMutableArray *objectsToAdd = [[NSMutableArray alloc] initWithObjects:@"One", @"Two", nil];
0 голосов
/ 13 января 2010

Возможно, проблема в том, что локальное объявление list в строке 4 конфликтует со свойством.

...