2012-02-11 11 views
38

Sto ottenendo il seguente errore da Xcode:Che cosa significa l'errore "Impossibile compilare la connessione:"?

Couldn't compile connection: <IBCocoaTouchOutletConnection:0x401538380 
<IBProxyObject: 0x40154a260> => categoryPicker => <IBUIPickerView: 0x4016de1e0>> 

Ho ridotto questo fino a una singola connessione di uscita in storyboard. Il mio codice (circa 30 visualizzazioni con molte altre connessioni) viene compilato e viene eseguito correttamente finché non aggiungo una connessione da un UIPicker alla proprietà categoryPicker della vista. Il selettore per sé funziona anche bene, non riesco proprio a ricaricarlo senza ottenere questa connessione al lavoro:

@interface FiltersTableViewController : UITableViewController <UIPickerViewDataSource, UIPickerViewDelegate> { 
    NSFetchedResultsController *fetchedResultsController; 
    FilterTableViewController *filterView; 

    AppDelegate *appDelegate; 
    NSManagedObjectContext *managedObjectContext;  
} 

@property (nonatomic, strong) FilterTableViewController *filterView; 
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; 
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; 

@property (nonatomic, weak) IBOutlet UIPickerView *categoryPicker; 

- (void)configureCell:(FilterTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; 
- (void)performFetch; 

@end 

L'UIPickerView è in un'UITableViewCell. Ecco un'immagine dello storyboard, il collegamento da "categoryPicker" a "FiltersTableViewController" causa l'errore: enter image description here

Grazie per tutte le idee o suggerimenti su come eseguire il debug!

EDIT: ho rimosso il collegamento e ha aggiunto una linea numberOfComponentsInPickerView:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 

    categoryPicker = pickerView; 

    return 1; 

}

funziona questo ora !, ma mi piacerebbe capire il motivo per cui la connessione non funziona e cosa significa questo messaggio di errore. In questo momento mi sembra una trappola per me poiché utilizzo le connessioni IB ovunque per ottenere riferimenti agli oggetti.

MODIFICA 2: Il collegamento di una cella prototipo genera questo errore: Configurazione non valida: Connessione "Cella" non può avere un oggetto prototipo come destinazione. Non sono sicuro se questo è nuovo in Xcode 4.5.

+0

Sembra che il problema sia, categoryPicker è "debole" e FilterTableViewController è "forte". Prova a rendere potente anche categoryPicker e controlla se funziona – doNotCheckMyBlog

+1

Grazie. Ho appena provato, ma non cambia nulla. (Ho l'impressione che IBOutlets dovrebbe essere debole ... Lo capisco da qui: http://www.raywenderlich.com/5773/beginning-arc-in-ios-5-tutorial-part-2). – Symmetric

+1

Sì, questo è tecnicamente corretto, scusate il mio male! Come ho appena letto nella documentazione di Apple! – doNotCheckMyBlog

risposta

107

Il problema è che questa è una cella prototipo. Non ha senso avere uno sfogo a qualcosa in esso, perché non è una cellula reale: è un modello per quello che potrebbe essere dozzine o centinaia di celle e quale sarebbe il punto di uscita in quel caso?

+2

Grazie! Questo ha senso ora, gli altri posti in cui uso le connessioni per questo genere di cose usano celle statiche. – Symmetric

+0

matt, grazie per la risposta. Sono bloccato ora. come posso indirizzare questi oggetti come il pulsante etichetta ecc. senza una presa? – carbonr

+7

Usa i tag e chiama 'viewWithTag:', o sottoclasse UITableViewCell in modo che ogni _cell_ abbia una presa che punta al suo pulsante _own_. – matt

19

SWIFT 2

stavo creando un segue popover e mi è stato sempre lo stesso errore.

Quello che ho fatto è stato seguire la risposta di @ matt di non mettendola su una cella, che è logico ora che l'ha spiegato!

Invece, ho inserito il TableView come ancoraggio e ha funzionato correttamente.

La speranza che aiuta quelli in futuro.

+3

Grazie per aver aggiunto questo, ho avuto questo problema su swift 2 e non sapevo perché – darkndream

+2

Felice di averlo aiutato! @darkndream – lukaivicev

+0

@lukesIvi Quindi l'hai implementato dal codice? –