Установка массива из другого класса target-c выдает ошибку, но все еще работает - PullRequest
1 голос
/ 12 июля 2011

Ошибка говорит мне, что «Нет» -setRosterForBoat: «метод найден».

Я пытаюсь передать массив обратно через стек контроллера навигации, который у меня есть.

В viewContoller, который я пытаюсь передать массив, я настроил его в .h примерно так:

NSArray *rosterForBoat;
@property(nonatomic, retain) NSArray *rosterForBoat;

Но программа работает нормально, и массив устанавливается с соответствующими объектами.Должен ли я ненавидеть просто игнорировать это, у кого-нибудь есть какие-либо предложения?

   CoCoachAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

   NSArray *arr = [[NSArray alloc] initWithArray:appDelegate.boatNavController.viewControllers];

   [appDelegate.boatNavController popToViewController:[arr objectAtIndex:1] animated:YES];

   [[arr objectAtIndex:1] setRosterForBoat:tempRowers];

Ответы [ 2 ]

4 голосов
/ 12 июля 2011

Поскольку вы используете массив rosterForBoat в качестве свойства, я бы синтезировал и установил бы его следующим образом:

CoCoachAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSArray *arr = [[NSArray alloc] initWithArray:appDelegate.boatNavController.viewControllers];

ViewController *view_controller = [arr objectAtIndex:1];
[appDelegate.boatNavController popToViewController:view_controller animated:YES];

view_controller.rosterForBoat = tempRowers;

Надеюсь, это поможет ...

3 голосов
/ 12 июля 2011

Проблема в том, что NSArray не определяет тип, как массивы других языков. Поэтому, когда вы используете objectAtIndex:, он возвращается к универсальному типу 'id'.

Если вы хотите, чтобы предупреждение исчезло, сделайте что-то вроде:

    YourViewController * controller = [arr objectAtIndex: 1];
    [controller setRosterForBoat: tempRowers];

И убедитесь, что вы определили setRosterForBoat: в файле .h вашего контроллера представления.

Редактировать: И чтобы ответить на ваш другой вопрос: это работает, потому что Objective-C использует передачу сообщений для связи между экземплярами. Во время компиляции XCode не может найти взаимосвязь Class-> Method между 'id' и setRosterForBoat :, но во время выполнения, потому что этот метод существует для вашего контроллера представления, все работает плавно.

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