2012-04-27 7 views
5

Sono un po 'curioso per lo sviluppo di applicazioni iOS con Xcode, anche se abbiamo espressamente Stato:Come mai Xcode non si collega automaticamente a QuartzCore quando il progetto lo utilizza?

#import <QuartzCore/QuartzCore.h> 

nel nostro ViewController.h, quando il progetto è legato, la libreria QuartzCore non è collegata automaticamente. Perché?

+0

+1 per la tua domanda ... anche io ho affrontato lo stesso problema anche dopo aver aggiunto il framework QuartzCore. Dovuto google questa sintassi ** # import ** a lungo. Sarebbe piaciuto se la funzione di completamento automatico fosse lì per questo. –

risposta

11

Perché l'importazione di un'intestazione non è in alcun modo collegata al collegamento con una libreria.

È necessario aggiungere QuartzCore Framework alle librerie di elenchi a cui sono collegati i collegamenti di destinazione.

enter image description here

Perché Xcode non farlo automaticamente?

Bene, le intestazioni che si stanno importando sono in realtà parte di tale framework. Quindi Xcode dovrebbe esaminare tutti i suoi framework, controllare le loro intestazioni e possibilmente collegare automaticamente le librerie connesse. Questo è certamente fattibile per i framework relativi ai sistemi operativi, ma quasi impossibile per i framework personalizzati fintanto che Xcode non conosce la loro posizione. A volte, le app non sono in realtà vogliono il da collegare a una libreria solo perché utilizzano ad es. un enum definito in un'intestazione.

2

Xcode non aggiunge automaticamente alcuna libreria diversa dalla base 3. Non ci vuole molto per il solo collegamento. Forse una versione futura rileverà, ma per ora devi andare a Costruire Fasi e collegarle.

+1

sì, dato che Xcode è così automatizzato da automatizzare anche tutto ciò che hai nel tuo progetto, non il collegamento anche quando è ovvio che ne hai bisogno, è un po 'strano ... ma forse può prevenire accidentalmente il collegamento troppo se abbiamo extra ' # import' che in realtà non abbiamo usato –

+0

Ovvio è relativo. Alcune persone potrebbero odiare il quarzo o non volerlo usare (piccolo gruppo, lo so), ma l'auto-collegamento a una struttura così ampia e grafica intensa potrebbe non essere ciò che tutti vogliono, specialmente quando il CG compensa Quartz. – CodaFi

2

Il punto è che Xcode non ha modo di sapere che il progetto deve essere collegato a Quartz Core Framework.

#import <QuartzCore/QuartzCore.h> non è sufficiente per dire che è necessario Quartz Core Framework. È possibile scrivere la propria libreria che includeva un file di intestazione denominato QuartzCore.h e inserirlo in una cartella denominata QuartzCore. Se si trova nel percorso di ricerca dei file di inclusione, è OK da usare, a meno che non si aggiunga anche il Quartz Core Framework ufficiale nel progetto (che porta a conflitti).

Ci sono altri esempi. Quando si importa uno spazio dei nomi in Visual Studio per un progetto .NET, non aggiunge automaticamente alcun assembly in "Riferimento" del progetto. È perché puoi aggiungere un assembly di terze parti come riferimento che ha lo stesso spazio dei nomi. È anche possibile aggiungere una versione diversa dell'assembly ufficiale di .NET Framework.

+0

In realtà, si forniscono le importazioni correlate al sistema operativo utilizzando segni di segno maggiore o minore per identificarle come intestazioni non utente (che vengono semplicemente contrassegnate utilizzando le virgolette) – Till

+0

In generale, si ha ragione.Ma è ancora possibile passare ulteriori percorsi di inclusione al compilatore e fargli cercare le intestazioni degli utenti quando si utilizza <> form. Consulta http://stackoverflow.com/questions/1044360/import-using-angle-brackets-and-quote-marks. – Hailei

Problemi correlati