Referința claselor nsbundle

Disponibil în iOS 2.0 și ulterior.

Obiectul NSBundle reprezintă locația din sistemul de fișiere care conține codul de grup și resursele care pot fi utilizate în program. Obiectele NSBundle determină localizarea resurselor programului, încărcarea și descărcarea dinamică a codului executabil și ajutorul în localizare. Creați un pachet în XCode folosind unul dintre aceste tipuri de proiecte: Application, Platform, Plugins.







În ciuda faptului că structurile de pachete variază în funcție de platforma țintă și tipul de pachet, creați o clasă NSBundle care ascunde această structură profundă în majoritatea cazurilor (dar nu toate). Multe metode pe care le utilizați pentru a încărca resurse dintr-un pachet determină automat locația directorului inițial adecvat și căutați resurse în locurile cunoscute. Pentru informații despre structura suitei de aplicații (pentru OS X și iOS), consultați Ghidul de programare a pachetelor. Pentru informații despre structura pachetelor de platforme, consultați Ghidul de programare a platformei. Pentru informații despre structura pluginurilor OS X, a se vedea. că Codul încarcă temele de programare.

Inițializarea NSBundle

Returnează obiectul NSBundle care corespunde fișierului URL specificat.

+ (instanță) bundleWithURL: (NSURL *) url

Adresa URL a directorului. Aceasta ar trebui să fie adresa URL a directorului; dacă conține orice referințe de caractere, acestea trebuie să fie rezolvate.

Valoarea returnată

NSBundle obiectul url corespunzător. sau zero dacă adresa URL nu identifică directorul pachet disponibil.

discuție

Dacă nu există unul existent, această metodă alocă și inițializează obiectul returnat NSBundle asociat cu url. când returnează un obiect existent.

Declarație de import

discuție

Această proprietate este setată după asigurarea încărcării dinamice a codului care conține definiția clasei. Dacă pachetul întâlnește erori în sarcină sau dacă nu poate găsi fișierul executabil în directorul pachet, acesta este proprietatea nul.

Mai întâi, în propriul său dicționar de informații, extrage informațiile codificate în lista de proprietăți a pachetelor (Info.plist). Pachetul primește clasa principală din dicționar folosind tasta NSPrincipalClass. Pentru pachetele descărcate (aplicații și platforme), dacă clasa principală nu este listată în lista de proprietăți, această proprietate este zero.

Dacă clasa principală nu este specificată în dicționarul de informații, pachetul identifică prima clasă încărcată ca clasă principală. Atunci când mai multe clase sunt conectate la un fișier încărcat dinamic, clasa implicită este prima linie de comandă listată pe ld. În următorul exemplu, generatorul de rapoarte ar fi clasa principală:

  • Reporterul meu. o Notepad. o QueryList. o

Ordinea claselor în browser-ul XCode al proiectului este ordinea în care acestea vor fi conectate. Pentru a indica clasa principală, glisați fișierul de control care conține implementarea sa în partea de sus a listei.







Următoarea metodă primește pachetul prin specificarea căii sale (bundleWithPath :), apoi încarcă pachetul principalClass și utilizează obiectul principal al clasei pentru alocarea și inițializarea unei instanțe din acea clasă:

  • - (void) loadBundle: (id) expeditor
  • Clasă exampleClass;
  • id newInstance;
  • NSString * path = @ "/ tmp / Projects / BundleExample / BundleExample.bundle";
  • NSBundle * bundleToLoad = [Bundle NSBundleWithPath: calea];
  • dacă (exampleClass = bundleToLoad. principalClass)
  • newInstance = [[exampleClass alloc] init];
  • [newInstance doSomething];
  • >
  • >

Declarație de import

Valoarea returnată

Calea completă pentru fișierul de resurse sau zero dacă fișierul nu a putut fi localizat.

discuție

Metoda descoperă mai întâi fișierul de resurse corespunzător din directorul de resurse ne-localizat al pachetului specificat. Dacă fișierul de resurse corespunzător nu este găsit, acesta va arăta apoi la cel mai înalt nivel al dosarului .lproj specific disponibil. (Ordinea de căutare pentru un folder specific limbajului corespunde preferințelor utilizatorului.) Acest lucru nu face apel recursiv prin alte subdirectoare în oricare dintre aceste locații. Pentru mai multe informații despre modul în care se găsesc resursele localizate, citiți Modelul de căutare pachet în Ghidul de programare a pachetelor.

Următorul fragment de cod primește calea spre plist din pachet și îl încarcă în NSDictionary.

  • NSBundle * thisBundle = [Bundle NSBundleForClass: [clasa auto]];
  • dacă (commonDictionaryPath = [această Bundle pathForResource: @ "CommonDictionary" dinType: @ "plist"])
  • theDictionary = [[NSDictionary alin] initWithContentsOfFile: commonDictionaryPath];
  • >

Declarație de import

Valoarea returnată

O matrice care conține căile complete pentru toate resursele din pachet cu extensia specificată. Dacă nu sunt găsite fișiere de resurse potrivite, această metodă returnează o matrice goală. De asemenea, returnează o matrice goală dacă pachetul specificat de parametrul bundlePath nu există sau nu este un director lizibil.

discuție

Această metodă furnizează valori medii pentru detectarea dinamică a mai multor resurse de pachete de același tip. Pentru mai multe informații despre modul în care se găsesc resursele localizate, citiți Modelul de căutare pachet în Ghidul de programare a pachetelor.

Această metodă este cea mai potrivită numai pentru extragerea aleatorie a fișierelor de resurse. În majoritatea cazurilor în care este necesar să se obțină resursele pachetului, este preferabil să se utilizeze în schimb metodele instanței NSBundle.

Declarație de import

discuție

Pentru o aplicație achiziționată de la App Store, utilizați această proprietate a suitei de aplicații pentru a determina locația de primire. Această proprietate nu garantează existența fișierului în adresă URL - doar că dacă este prezentă chitanța, care este locația acesteia.

Practica comună cea mai de succes a unei conexiuni slabe folosind metoda responssToSelector nu poate fi utilizată aici. Înainte de iOS 7, metoda a fost implementată ca un SPI privat, dar această implementare numită metoda doesNotRecognizeSelector:.

Declarație de import

Valoarea returnată

DA adevărat dacă pachetul a fost descărcat cu succes sau nu a fost deja încărcat; în caz contrar, NU este fals dacă ambalajul nu a putut fi descărcat.

discuție

Această metodă încearcă să descarce codul de pachet executabil utilizând un încărcător dinamic de bază (de obicei, dyld). Puteți utiliza această metodă pentru a descărca pachetele plug-in și platformă atunci când nu mai aveți nevoie de codul pe care îl conțin. Trebuie să utilizați această metodă pentru a descărca pachetele încărcate utilizând metodele de clasă NSBundle. Nu utilizați această metodă pentru a descărca pachetele încărcate inițial utilizând funcțiile de manipulare a pachetelor din cadrul de bază.

Este responsabilitatea apelantului să se asigure că nici un obiect din memorie sau structurile de date nu este relevant pentru codul care urmează să fie descărcat. De exemplu, dacă aveți un obiect a cărui clasă este definită în pachet, trebuie să eliberați acel obiect înainte de descărcarea pachetului. În mod similar, codul dvs. nu trebuie să încerce accesarea niciunuia dintre caracterele definite în pachetul descărcat.

Note speciale

Înainte de versiunea 10.5, codul OS X nu a putut fi descărcat odată descărcat, iar această metodă va întoarce întotdeauna NO false. În versiunea 10.5 a sistemului OS X și ulterior, puteți descărca codul pachetului executabil utilizând această metodă.

Declarație de import







Articole similare

Trimiteți-le prietenilor: