2013-10-26 5 views
5

Ich versuche, die veraltetDer Versuch, veraltet zu ersetzen loadnibnamed: Besitzer

[NSBundle loadNibNamed:@"Subscriptions" owner:self]; 

mit diesem statt

[[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil]; 

aber der Dialog erscheint (nur kann ich das entspricht finden Sache) zu ersetzen und verschwindet sofort, anstatt offen zu bleiben, wie es mit dem veralteten Anruf war.

Dieser Code befindet sich in einem Viewcontroller wie diesem.

- (id)init{ 
    self = [super init]; 
    if (self) { 
     //[NSBundle loadNibNamed:@"Subscriptions" owner:self]; 

     [[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil]; 
    } 
    return self; 

}

und ich es von der AppDelegate wie dies nenne.

SubscriptionsViewController *subscriptionsViewController = [[SubscriptionsViewController alloc] init]; 
[subscriptionsViewController.window makeKeyAndOrderFront:self]; 

Gibt es etwas, das ich vermisse? Es scheint mir direkt zu sein.

+0

Ich bin auch mit dem gleichen Problem, Sie eine Lösung gefunden haben – Retro

Antwort

1

Der Dialog, der erscheint und dann verschwindet, ist ein Zeichen für eine mögliche Objekt-Sammlung - mit einem starken Verweis auf den Dialog wird er gesammelt und verloren.

Der veraltete Anruf behielt die Eigentümerschaft der Objekte der obersten Ebene in der Feder, der neue Anruf nicht.

Daher müssen die Eigenschaften des Eigentümerobjekts, die auf Objekte auf oberster Ebene verweisen, stark sein, oder Sie müssen das Array der Objekte auf oberster Ebene beibehalten. Dies steht im Gegensatz zu der alten Empfehlung, wo solche Eigenschaften schwach waren.

Eigenschaften, die Objekte nicht der obersten Ebene in der Spitze referenzieren, können immer noch schwach sein.

+0

so, was die Lösung sein könnte, ich habe den Austritt stark ist, aber es ist immer noch – Retro

+0

@Retro versteckt - Es klingt wie Sie eine andere haben Problem, wenn Sie eine starke Referenz haben, wird das Objekt nicht gesammelt. Stellen Sie Ihre eigene Frage, geben Sie Details Ihres Codes an, was schief geht und was Sie versucht haben - dann könnte Ihnen jemand helfen. – CRD

1

Ich hatte gerade ein ähnliches Problem, wenn loadNibNamed: owner: topLevelObjects: mit und bekam immer einen Fehler wie

[__NSArrayM insert: atIndex:]: Objekt kann mit abgefangene Ausnahme vom Typ NSException Abbruch nicht gleich Null‘endet() aufgerufen

Da meine Top-Level-Objekte Null.

Ich entdeckte schließlich, dass die Nib-Datei, die ich geladen hatte, seine Interface Builder-Version auf "Xcode 4.6" eingestellt hatte. Als ich das auf 6.2 eingestellt habe, hat alles wieder gut funktioniert.

enter image description here