Как я могу редактировать изменяемое свойство в Objective C? - PullRequest
1 голос
/ 18 ноября 2009

Я пытаюсь редактировать изменяемый массив из свойства и, похоже, не может напрямую заставить его работать. Рассмотрим следующий код, который, кажется, работает, но кажется также очень неэффективным; Я должен скопировать весь массив свойств, чтобы внести изменения в один объект. Почему я могу изменить весь массив "carNames", но не могу внести изменения в один из его объектов?

Спасибо за любой свет, который вы могли бы предоставить ...

// CarTableViewController.h


// ...


@interface CarTableViewController : UITableViewController {
    NSMutableArray *carNames;
}

@property (nonatomic, retain) NSMutableArray *carNames;

-(IBAction)addCarButton:(id)sender;
// ...
// --------------------------------------

// -------CarTableViewController.m-------

// ...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Could I somehow run the removeOjectAtIndex: 
        // directly on the carNames Property?  - this code works...

        NSMutableArray *mutablecarNames = [carNames mutableCopy];
        [mutablecarNames removeObjectAtIndex:indexPath.row];
        carNames = [mutablecarNames copy];
        [mutablecarNames release];

            // This code doesn't work... Why?
            // [carNames removeObjectAtIndex:indexPath.row];

    }

// ...

Ответы [ 2 ]

7 голосов
/ 18 ноября 2009

Вы устанавливаете carNames как результат [mutableCarNames copy], который является неизменным NSArray. Вы хотите mutableCopy вместо.

1 голос
/ 18 ноября 2009

Почему вы не просто звоните [carNames removeObjectAtIndex:indexPath.row]?

Это должно работать нормально, так как это изменяемый массив.

...