Это лучший способ установить целевые массивы равными другим - PullRequest
1 голос
/ 20 июня 2011

У меня здесь два массива из другого класса и один, который я создал в функции, моя конечная цель - отсортировать teamRoster по алфавиту, это похоже на работу, но может кто-нибудь сказать мне, если есть лучший способ? Спасибо.

-(IBAction)submitAndSendBack:(id)sender{
        CoCoachAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

        NSString *fullName = [ NSString stringWithFormat:@"%@ %@",firstName.text, lastName.text];   
        [[appDelegate teamRoster] addObject:fullName];
        NSArray *temp = [[appDelegate teamRoster] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

        [[appDelegate teamRoster] removeAllObjects];
        [[appDelegate teamRoster] addObjectsFromArray:temp];


        NSLog(@"%@", [appDelegate teamRoster]);

        [ap

pDelegate.navigationController popViewControllerAnimated:YES];
}

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Есть ли лучший способ? Зависит от того, что вы подразумеваете под «лучше».

Ваш код правильный и достаточно простой для понимания.

Предполагая, что teamRoster является свойством типа NSMutableArray, вы можете просто отсортировать его по месту:

[[appDelegate teamRoster] sortUsingSelector:@selector(caseInsensitiveCompare:)];

Но могут быть причины НЕ делать это таким образом, например, для производительности или параллелизма.

С другой стороны, вы можете защитить массив teamRoster от изменения кодом вне делегата приложения, и в этом случае вы должны сделать его доступным только как неизменяемый NSArray, и вы не сможете чтобы использовать его для сортировки.

0 голосов
/ 20 июня 2011

Как насчет этого?

NSArray *temp = [[appDelegate teamRoster] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
[appDelegate setTeamRoster:temp];

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

0 голосов
/ 20 июня 2011

Попробуйте это:

appDelegate.teamRoster = [[temp mutableCopy] autorelease];

Предполагается, что у вас есть настройка свойства, которая позволяет вам изменять teamRoster.

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