Az nsbundle osztály hivatkozása

Az iOS 2.0-s és újabb verziói elérhetők.

Az NSBundle objektum képviseli a fájlrendszerben lévő helyet, hogy a csoportkód és a programban használható erőforrások. Az NSBundle objektumok meghatározzák a program erőforrásainak helyét, dinamikusan betöltik és eltávolítják a végrehajtható kódot, és segítenek a lokalizációban. Csomagot hoz létre az XCode-ban ezen projekttípusok egyikével: Alkalmazás, Platform, Plugins.

Annak ellenére, hogy a csomagstruktúrák a célplatform és a csomagtípus függvényében változnak, NSBundle osztályt hoz létre, amely a legtöbb (de nem minden) esetet elrejtőzi ennek a mély struktúrának. Számos módszer, amelyet erőforrások betöltéséhez használ egy csomagból, automatikusan meghatározza a megfelelő kezdeti könyvtár helyét, és az ismert helyeken erőforrásokat keres. Az alkalmazáskészlet szerkezetéről (OS X és iOS) vonatkozóan olvassa el a Csomag programozási útmutatóját. A platformcsomagok felépítésével kapcsolatos információkért lásd a Platform programozási útmutatót. Az OS X bővítmények szerkezetéről lásd:. hogy a kód betölti a programozási témákat.

NSBundle inicializálás

Az NSBundle objektumot adja vissza, amely megfelel a megadott URL-fájlnak.

+ (instancetype) bundleWithURL: (NSURL *) url

URL a könyvtárba. Ez legyen a könyvtár URL-je; ha tartalmaz bármilyen karakter utalást, akkor fel kell oldani őket.

Visszatérési érték

NSBeld a megfelelő url objektumot. vagy nulla, ha az url nem azonosítja az elérhető csomag könyvtárat.

megbeszélés

Ha nincs létező, akkor ez a módszer elosztja és inicializálja az URL-hez társított visszatért NSBundle objektumot. amikor visszaad egy meglévő objektumot.

Jelentés importálása

megbeszélés

Ez a tulajdonság úgy van beállítva, hogy az osztálydefiníciót tartalmazó kód dinamikusan betöltődött. Ha a csomag hibát észlel a terhelésben, vagy ha nem találja a végrehajtható fájlt a csomag könyvtárában, akkor ez a nulla tulajdonság.

Először a saját információs szótárban vizsgálja meg a csomag tulajdonságlistában (Info.plist) kódolt információkat. A csomag az NSPrincipalClass kulcs használatával megkapja a fő osztályt a szótárból. A betöltetlen csomagok (alkalmazások és platformok) esetében, ha a fő osztály nem szerepel az ingatlanlistában, ez a tulajdonság nulla.

Ha a fő osztály nem szerepel az információs szótárban, a csomag azonosítja az első osztályt, amelyet fő osztályként betöltött. Ha több osztály kapcsolódik egy dinamikusan betölthető fájlhoz, az alapértelmezett osztály az első parancssor az ld-ben. A következő példában a jelentéskészítő lenne a fő osztály:

  • ld - o myBundle - r Reporter. o jegyzetfüzet. o QueryList. o

Az osztályok sorrendje a projekt XCode böngészőjében a sorrend, amelyben csatlakoznak. A fő osztály jelöléséhez húzza át a végrehajtást tartalmazó vezérlőfájlt a lista tetejére.

A következő módszer megkapja a csomagot az elérési út (bundleWithPath :) megadásával, majd betölti a principalClass csomagot, és az osztály fő objektumát használja az osztály egy példányának kiosztására és inicializálására:

  • - (érvénytelen) loadBundle: (id) feladó
  • Class exampleClass;
  • id newInstance;
  • NSString * path = @ "/ tmp / Projects / BundleExample / BundleExample.bundle";
  • NSBundle * bundleToLoad = [NSBundle bundleWithPath: elérési út];
  • ha (exampleClass = bundleToLoad. principalClass)
  • newInstance = [[exampleClass alloc] init];
  • [newInstance doSomething];
  • >
  • >

Jelentés importálása

Visszatérési érték

Az erőforrás fájl teljes elérési útja vagy nulla, ha a fájl nem található.

megbeszélés

A módszer először a megfelelő forrásfájlt keresi a megadott csomag nem lokalizált erőforrás-könyvtárában. Ha a megfelelő erőforrásfájl nem található, akkor a rendelkezésre álló .lproj-specifikus mappák felső szintjére néz. (A nyelvspecifikus mappák keresési sorrendje megfelel a felhasználó preferenciáinak.) Ez nem rekurzív módon hívja fel a többi alkönyvtárat sem ezeken a helyeken. Ha többet szeretne tudni arról, hogy hogyan találhatók meg a helyi erőforrások, olvassa el a Csomagolási programozási útmutató Csomagkeresési mintáját.

A következő kódfájl megkapja az útvonalat a csomagban található plisthez, és betölti az NSDictionary-be.

  • NSBundle * thisBundle = [NSBundle bundleForClass: [önálló osztály]];
  • ha (commonDictionaryPath = [thisBundle pathForResource: @Type típusú "CommonDictionary": @ "plist"])
  • theDictionary = [[NSDictionary alloc] initWithContentsOfFile: commonDictionaryPath];
  • >

Jelentés importálása

Visszatérési érték

Egy tömb, amely tartalmazza a csomag teljes erőforrásainak teljes elérési útját a megadott kiterjesztéssel. Ha nem találnak megfelelő erőforrásfájlokat, akkor ez a módszer üres tömböt ad vissza. Ugyancsak üres tömböt ad vissza, ha a bundlePath paraméter által megadott csomag nem létezik, vagy nem olvasható könyvtár.

megbeszélés

Ez a módszer átlagértékeket biztosít az azonos típusú többcsomagos erőforrások dinamikus észleléséhez. Ha többet szeretne tudni arról, hogy hogyan találhatók meg a helyi erőforrások, olvassa el a Csomagolási programozási útmutató Csomagkeresési mintáját.

Ez a módszer csak az erőforrásfájlok véletlenszerű kitermelésére alkalmas. Azon esetekben, amikor a csomag erőforrásainak beszerzéséhez szükséges, célszerűbb az NSBundle példányt használni.

Jelentés importálása

megbeszélés

Az App Store-ból vásárolt alkalmazáshoz használja az alkalmazáskészlet ezen tulajdonságát a fogadó hely meghatározásához. Ez a tulajdonság nem garantálja, hogy a fájl létezik-e az URL-ben - csak abban az esetben, ha az átvétel jelen van, és ez a hely.

A respondsToSelector módszert használó gyenge összeköttetés leggyakoribb sikeres gyakorlata itt nem használható. Az iOS 7 előtt a módszert egyéni SPI-ként hajtották végre, de a végrehajtást didNotRecognizeSelector: method.

Jelentés importálása

Visszatérési érték

IGEN igaz, ha a csomag sikeresen ki lett töltve, vagy még nem volt betöltve; ellenkező esetben nem hamis, ha a csomagot nem lehet eltávolítani.

megbeszélés

Ez a módszer megkísérli eltávolítani a végrehajtható csomagkódot egy alapvető dinamikus betöltővel (általában dyld). Ezzel a módszerrel eltávolíthatja a plug-in és a platformcsomagokat, ha már nincs szüksége az általuk tartalmazott kódra. Ezt a módszert kell használnia az NSBundle osztályú módszerek használatával betöltött csomagok eltávolításához. Ne használja ezt a módszert az eredetileg betöltött csomagok eltávolításához a csomagkezelési funkciók segítségével a Base Framework alkalmazásban.

A hívó fél felelőssége annak biztosítása, hogy a memóriában vagy az adatszerkezetekben lévő objektumok ne vonatkozzanak a betöltendő kódra. Ha például van egy olyan objektum, amelynek osztályát a csomag határozza meg, akkor az objektumot fel kell szabadítani, mielőtt kibontaná a csomagot. Hasonlóképpen, a kód nem kísérel meg hozzáférni a betöltetlen csomagban megadott karakterekhez.

Különleges megjegyzések

A 10.5-ös verziót megelőzően az OS X kódot nem lehet letölteni, miután letöltötték, és ez a módszer mindig visszaadja a NINCS-t. Az OS X és újabb verzió 10.5-ös verziójában eltávolíthatja a végrehajtható csomagkódot ezzel a módszerrel.

Jelentés importálása

Kapcsolódó cikkek