2009-07-10 3 views
1

Я пытаюсь загрузить новый вид в существующий контроллер представления, но я хочу загрузить этот вид из xib-файла. Мой план состоял в том, чтобы создать второй viewController (viewController1 в коде ниже), а затем сохранить его представление и освободить этот viewController, который я только что создал. Я надеялся, что viewController будет выпущен, и представление будет придерживаться, но это, похоже, не происходит.Могу ли я сохранить вид, выпуская свой ViewController?

Вопрос 1: Если диспетчер просмотра получает освобожденный пароль, его связанное представление будет отменено независимо от того, какой счет сохраняется? В приведенном ниже примере кода вы можете видеть, что в представлении есть счет сохранения 13, прежде чем он внезапно исчезнет.

Вопрос 2: Почему сохранение вида увеличивает его сохранение на 3?

PageViewController *viewController1 = [[PageViewController alloc] initWithNibName:@"Page1" bundle:nil]; 
[viewController1.view setUserInteractionEnabled:YES]; 

NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1 
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=4 

self.currentPageView=viewController1.view; 

NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1 
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=7 


[viewController1.view retain]; 

NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1 
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=10 

[self.view addSubview:viewController1.view]; 

NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1 
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=13 

[viewController1 release]; 

NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); 
//objc[3237]: FREED(id): message view sent to freed object=0x538ce0 

ответ

1

Ошибка вы получаете о «сообщении, отправленном на освобожденный объект» не говорят вам, что вид был освобожден, то, что viewController1 был освобожден, и, таким образом, вы получаете при отправке сообщения «Просмотр». (помните, что в Objective C каждый доступ к свойствам действительно отправляет сообщение ...)

Я не уверен, почему счет сохранения сохраняется в 3 раза каждый раз.

+0

Спасибо, я до сих пор не понял, почему счет за сохранение прыгает на 3 каждый раз, но я думаю, что это довольно грязно, что я просто попытаюсь реорганизовать вещи, чтобы полностью избежать проблемы. Хотелось бы, чтобы у меня хватило репутации, чтобы проголосовать за ответ Хикару ниже, также, это было полезно. – niels

1

Это может помочь:

[[NSBundle mainBundle] loadNibNamed:@"Page1" owner:self options:nil]; 

где самость существующий ViewController.

1

эта линия не имеет смысла

self.currentPageView=viewController1.view;

мнение в viewController1 еще не построен, так как метод loadView в том, что контроллер не называется

хотя вы можете добавить новый подвид в viewController.view из-за «магии», позволяющей добавить объект к виду, которое еще не построено.

Это не меняет факт - viewController.view не существует в то время.

примечание: все controller.view построен в методе viewDidLoad/loadView и viewDidLoad/loadView не будет звонить, пока он не будет отображаться (. Например pushController)

обычно я не полагаться на сохранение счетчика из-за это ненадежно.

Смежные вопросы