Откуда вы знаете, что pushViewController сохраняет помещенный объект? - PullRequest
2 голосов
/ 30 июня 2011

ответы здесь все говорят, что pushViewController сохраняет заданный viewController, но они не ссылаются на документ, который утверждает это.

Вопрос в том, откуда они знают, что pushViewController сохранит данный контроллер представления? Можем ли мы предположить, что это соглашение соблюдается всеми другими классами, которые принимают ваш указатель на производный объект NSObject *?

Edit:

Мне нужен более сильный аргумент / доказательство, чем то, что предлагают представленные в настоящее время ответы. Например, документация о UIView :: addSubview четко гласит: «Это представление сохраняется получателем». В качестве альтернативы, если вы намереваетесь показать, что полученный контроллер сохранен неявно, потому что UINavigationController имеет ту же семантику, что и класс коллекции, то покажите, что он это делает, показав, что он использует один из классов коллекции внутри, или ссылаясь на некоторую документацию, в которой говорится этот. В документации для pushViewController говорится, что данный контроллер представления помещен в «стек навигации», но нигде не говорится, к какому классу относится этот стек. Фактически, глядя на определение в заголовочном файле UINavigationController, похоже, что он не использует стек, а использует NSMutableArray. Если вы получили степень по математике и написали доказательства, тогда вы поймете ту интеллектуальную строгость, которую я ищу.

Ответы [ 4 ]

7 голосов
/ 30 июня 2011

Поскольку коллекции всегда принадлежат их предметам, и родители всегда владеют своими детьми.

В некотором смысле, контроллер навигации работает как тип коллекции - стек.

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

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW1

Когда вы добавляете объект в коллекцию (например, массив, словарь или набор), коллекция становится его владельцем.Коллекция отменяет владение, когда объект удаляется из коллекции или когда сама коллекция освобождается.

0 голосов
/ 01 июля 2011

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

С Руководство по программированию контроллера представления :

стек навигации - это последняя, ​​первая и первая коллекция объектов контроллера пользовательского представления, управляемая контроллером навигации.

0 голосов
/ 01 июля 2011

Документация Apple никогда не была самой строгой. Что вы получаете с [NSString stringWithString:nil]? [NSArray arrayWithArray:nil]? [NSURL URLWithString:nil]

(Ответы: исключение, пустой массив и либо исключение, либо ноль в зависимости от версии ОС.)

В конце концов, не так уж важно, что говорит документация. Objective-C в значительной степени о соглашении, и если вы понимаете соглашения, вы, как правило, поймете это правильно. Падение происходит, когда есть крайние случаи, когда документация не упоминалась, а вы не тестировали, или документация неправильная (AVCapture на iPhone 3G не поддерживает 420v), или Apple меняет то, что происходит для крайних случаев (с NSURL выше, это означает, что более старые версии ОС выходили из строя там, где новые были в порядке), или кто-то вводил ошибку (например, AVCapture при 640x480 420v зависает на 4.1 / 3GS, но , только если вы установите его - по умолчанию 420v, и если Вы не трогаете его, он работает отлично!).

И если что-то пойдет не так, указание пальцем на документацию не спасет вас. Даже если это не ваша вина, это все равно ваша проблема: ваше приложение аварийно завершает работу, и вы обязаны сделать это своим пользователям (если Apple не запрещает вам делать это, что также происходит).

Тестирование превосходит документацию.

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

вы должны попробовать это

id temp = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:temp animated:YES];

вы перейдете к любому другому предыдущему ViewController, доступному в стеке.

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