Доступ к переменным ViewController из делегата UIActionSheet - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть следующий код:

@implementation SendMapViewController

NSMutableArray *emails;

При этом методе я создаю массив писем и добавляю некоторые строки NSSt

- (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker
       shouldContinueAfterSelectingPerson: (ABRecordRef)person {

    ABMultiValueRef emailInfo = ABRecordCopyValue(person, kABPersonEmailProperty);

    NSUInteger emailCount = ABMultiValueGetCount(emailInfo);

    if (emailCount > 1) {

        UIActionSheet *emailsAlert = [[UIActionSheet alloc]
                                      initWithTitle:@"Select an email"
                                      delegate:self 
                                      cancelButtonTitle:nil
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:nil];

        emails = [NSMutableArray arrayWithCapacity: emailCount];

        for (NSUInteger i = 0; i < emailCount; i++) {
            NSString *emailFromContact = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, i);

            [emails addObject: emailFromContact];

            [emailsAlert addButtonWithTitle:emailFromContact];

            [emailFromContact release];
        }

        [emailsAlert addButtonWithTitle:@"Cancel"];

        [emailsAlert showInView:self.view];

        [emailsAlert release];
    }
    else {
        ...
    }

    CFRelease(emailInfo);

    [self dismissModalViewControllerAnimated:YES];

    return NO;
}

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

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    if ([emails count] >= buttonIndex) {
        NSString *contactEmail = (NSString *)[emails objectAtIndex:buttonIndex];

        ...
    }
}

Но в массиве писем нет ни одного письма. Что я делаю не так?

Я разрабатываю для iPhone.

1 Ответ

0 голосов
/ 16 апреля 2010

Ваш emails объект, вероятно, был автоматически выпущен, когда вы не искали. Заменить строку:

emails = [NSMutableArray arrayWithCapacity: emailCount];

с:

[emails release];
emails = [[NSMutableArray alloc] initWithCapacity:emailCount];

, чтобы emails не выпускался автоматически. ( Помните , у вас есть все, что возвращается init, но объекты, возвращаемые удобными конструкторами, такими как arrayWithCapacity:, автоматически освобождаются.)

Лучшим решением 1016 * является объявление свойства:

@property (retain) NSMutableArray* emails;

и затем используйте:

[self setEmails:[NSMutableArray arrayWithCapacity: emailCount]];

Этот второй метод, использующий свойство, действительно лучший, потому что он более гибкий и понятный. Таким образом, методы доступа к свойству (которые вы создаете с помощью @synthesize) будут обрабатывать для вас вызов retain.

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