Domanda

Sto seguendo un tutorial su come usare Interface Builder dal capitolo 2 dello sviluppo di applicazioni SDK per iPhone di Zdziarsky. " L'idea sembra essere quella di creare un'app molto semplice che consiste in un controller della barra delle schede che ha due pulsanti, ognuno legato a un oggetto vista diverso (e ogni oggetto vista nel suo rispettivo file .xib). Quello che finisco con è una finestra vuota e un codice significativamente diverso da quello che il libro indica che dovrei avere.

Sospetto un passaggio mancante, ma i passaggi indicati sono sparsi in un capitolo di spiegazione, quindi non sono sicuro al 100% di non aver perso qualcosa. Ecco un riepilogo di quelli che sembrano essere i passaggi:

  1. Crea una nuova applicazione " basata su finestra " chiamato " Esempio. "
  2. Apri MainWindow.xib in Interface Builder ed esegui le seguenti operazioni: a) Seleziona la finestra " " icona nella finestra del documento, aprire la finestra di ispezione, impostare varie proprietà estranee. b) Trascina un " Tab Bar Controller " nella finestra del documento. c) Modifica i due nomi delle schede in " Recents " e " Storia. " d) Salva MainWindow.xib
  3. Crea un nuovo " Cocoa Touch View " Modello IB. Aggiungi una " vista tabella " ad esso. Salvalo come Recents.xib.
  4. Allo stesso modo, crea un altro " Cocoa Touch View " Modello IB. Aggiungi una vista di testo " " ad esso, salva come History.xib.
  5. Torna a MainWindow.xib, modifica ognuna delle schede nel controller della barra delle schede nell'Inspector in modo che il " Nome del pennino " corrisponde al file .xib appropriato creato nel passaggio 3 (per i recenti) e nel passaggio 4 (per la cronologia).
  6. Aggiungi Recents.xib e History.xib al progetto " Esempio. "

A questo punto, il libro dice che se guardo ExampleAppDelegate.h, dovrei vedere i collegamenti agli oggetti Interface Builder nel mio codice, come:

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RootViewController *viewController;

Quando guardo il file, vedo solo la prima riga (UIWindow) sopra. La linea RootViewController è assente.

Allo stesso modo, il libro dice che quando guardo all'interno di ExampleAppDelegate.m, dovrei vedere alcune direttive di sintesi:

@synthesize window;
@synthesize viewController;

Ma di nuovo, vedo solo la linea relativa alla finestra.

E di sicuro, se faccio clic su " Build and Go, " quello che vedo nel simulatore è una finestra vuota.

Una delle cose che ho notato durante questo processo è che non mi è stato chiesto di trascinare il controller della barra delle schede dal passaggio 2b direttamente nell'oggetto Window visualizzato nel builder di interfacce. Ho provato a farlo comunque e ho scoperto che non mi era permesso (e in effetti, che i controller di visualizzazione di qualsiasi tipo non sembravano benvenuti direttamente nella finestra). Mi è sembrato strano - ho notato che trascinare direttamente un oggetto View nella finestra sembrava OK. Ma poiché Views non può contenere View Controller, non riesco a vedere come si possa mai aggiungere un View Controller all'interno di un'erarchia contenuta in una Finestra.

Quali passi e / o conoscenze mi mancano qui?

È stato utile?

Soluzione

Le prese finestra e viewController vengono aggiunte come parte del modello di progetto, quindi forse i modelli di XCode sono cambiati da quando è stato scritto il tutorial. XCode ora ha modelli separati per la barra delle schede, la navigazione e le app basate sulla vista, quindi dovresti dare un'occhiata a quelle.

Con il semplice modello di app basato su Windows è necessario aggiungere la presa rootViewController nel file di intestazione AppDelegate e collegarla all'istanza del controller di visualizzazione in IB. Il delegato dell'app dovrebbe inoltre disporre di un codice per aggiungere la vista principale alla finestra:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:rootViewController.view]; 
}

Ecco come il controller della vista principale si collega alla finestra dell'app. Senza quel codice, vedrai solo una finestra vuota.

Altri suggerimenti

Se non è lì, scrivilo e non c'è magia. Tuttavia, se vuoi che IB sia al passo con questo, credo che il passo che ti manca sia File - > Scrivi file di classe ; anche se è un po 'glitch con le fusioni e proverei a capire cosa dovrebbe essere lì invece di fare affidamento esclusivamente su di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top