Доступний в iOS 2.0 і пізніше.
NSBundle об'єкт являє розташування в файлової системі, що код груп і ресурси, які можуть використовуватися в програмі. NSBundle об'єкти визначають місце розташування ресурсів програми, динамічно завантажують і розвантажують виконуваний код і допомагають в локалізації. Ви створюєте пакет в XCode за допомогою одних з цих типів проектів: Додаток, Платформа, плагіни.
Незважаючи на те, що структури пакета варіюються в залежності від цільової платформи і типу пакету, Ви створюєте, NSBundle клас приховує цю глибинну структуру в більшості (але не всі) випадки. Багато методів, які Ви використовуєте для завантаження ресурсів з пакета автоматично, визначають місце розташування належного початкового каталогу і шукають ресурси в відомих місцях. Для отримання інформації про структури комплекту додатків (для OS X і iOS), см. Керівництво по програмуванню Пакета. Для отримання інформації про структуру пакетів платформи см. Керівництво по програмуванню Платформи. Для отримання інформації про структуру плагінів OS X подивіться. що Код Завантажує Теми Програмування.
ініціалізація NSBundle
Повернення NSBundle об'єкт, відповідний вказаного файлу URL.
+ (Instancetype) bundleWithURL: (NSURL *) url
URL до каталогу. Це повинно бути URL для каталогу; якщо це містить будь-які символічні посилання, вони повинні бути можна вирішити.
значення, що повертається
NSBundle відповідний об'єкт url. або nil якщо url не ідентифікує доступний каталог пакета.
Обговорення
Якщо там є не існуючим, цей метод виділяє і ініціалізує повернутий об'єкт NSBundle пов'язаний з url. коли це повертає існуючий об'єкт.
оператор імпорту
Обговорення
Це властивість встановлено після забезпечення, що динамічно завантажується код, що містить визначення класу. Якщо пакет зустрічається з помилками в завантаженні або якщо це не може знайти файл виконуваного коду в каталозі пакета, це властивість nil.
Це спочатку дивиться в його власному інформаційному словнику, витягувати інформацію, закодовану в списку властивостей пакета (Info.plist). Пакет отримує основний клас зі словника за допомогою ключа NSPrincipalClass. Для незагружаемую пакетів (додатки і платформи), якщо основний клас відсутній в списку властивостей, це властивість nil.
Якщо основний клас не вказано в інформаційному словнику, пакет ідентифікує перший клас, завантажений як основний клас. Коли кілька класів з'єднуються в динамічно завантажений файл, основний клас за замовчуванням є першим, перерахованим на ld командний рядок. У наступному прикладі Генератор звітів був би основним класом:
- ld - o myBundle - r Reporter. o NotePad. o QueryList. o
Порядок класів в браузері XCode проекту є порядком, в якому вони будуть з'єднані. Для позначення основного класу перетягніть управління файл, який містить його реалізацію до верхньої частини списку.
Наступний метод отримує пакет шляхом вказівки його шляху (bundleWithPath:), потім завантажує пакет principalClass і використовує основний об'єкт класу, щоб виділити і форматувати екземпляр того класу:
- - (Void) loadBundle: (id) sender
- Class exampleClass;
- id newInstance;
- NSString * path = @ "/ tmp / Projects / BundleExample / BundleExample.bundle";
- NSBundle * bundleToLoad = [NSBundle bundleWithPath: path];
- if (exampleClass = bundleToLoad. principalClass)
- newInstance = [[exampleClass alloc] init];
- [NewInstance doSomething];
- >
- >
оператор імпорту
значення, що повертається
Повний шлях для файлу ресурсів або nil якщо не міг би бути розташований файл.
Обговорення
Метод спочатку шукає відповідний файл ресурсів в нелокалізованих каталозі ресурсу зазначеного пакета. Якщо відповідний файл ресурсів не знайдений, це тоді дивиться на верхньому рівні доступного специфічного для мови .lproj папка. (Пошуковий порядок на специфічні для мови папки відповідає перевагам користувача.) Це не рекурсивно викликає через інші папки ні в одному з цих розташувань. Для отримання додаткової інформації про те, як локалізовані ресурси знайдені, вважайте Зразок Пошуку Пакета в Керівництві з програмування Пакета.
Наступний фрагмент коду отримує шлях до plist в пакеті і завантажує його в NSDictionary.
- NSBundle * thisBundle = [NSBundle bundleForClass: [self class]];
- if (commonDictionaryPath = [thisBundle pathForResource: @ "CommonDictionary" ofType: @ "plist"])
- theDictionary = [[NSDictionary alloc] initWithContentsOfFile: commonDictionaryPath];
- >
оператор імпорту
значення, що повертається
Масив, що містить повні шляхи для всіх ресурсів пакета з зазначеним розширенням. Якщо ніякі файли ресурсів відповідники не знайдені, цей метод повертає порожній масив. Це також повертає порожній масив якщо пакет, зазначений bundlePath параметр не існує або не є читаним каталогом.
Обговорення
Цей метод забезпечує середні значення для того, щоб динамічно виявити багаторазові ресурси пакета того ж типу. Для отримання додаткової інформації про те, як локалізовані ресурси знайдені, вважайте Зразок Пошуку Пакета в Керівництві з програмування Пакета.
Цей метод підходить найкраще тільки для випадкового вилучення файлів ресурсів. У більшості випадків, де необхідно отримати ресурси пакета, переважно використовувати NSBundle методи екземпляра замість цього.
оператор імпорту
Обговорення
Для додатки, купленого від App Store, використовуйте це властивість комплекту додатків для визначення місця розташування отримання. Це властивість не робить гарантії про те, чи існує файл в URL - тільки що, якщо отримання присутній, який є його розташуванням.
Загальна найбільш успішна практика слабкого з'єднання за допомогою respondsToSelector: метод не може використовуватися тут. До iOS 7 метод був реалізований як приватний SPI, але та реалізація викликала doesNotRecognizeSelector: метод.
оператор імпорту
значення, що повертається
YES true якщо пакет був успішно розвантажений або ні вже завантажений; інакше, NO false якщо не міг би бути розвантажений пакет.
Обговорення
Цей метод намагається розвантажити виконуваний код пакета за допомогою базового динамічного завантажувача (зазвичай dyld). Можна використовувати цей метод для розвантаження плагіна і пакетів платформи, коли Вам більше не потрібний код, вони містять. Необхідно використовувати цей метод для розвантаження пакетів, завантажених за допомогою методів NSBundle клас тільки. Не використовуйте цей метод для розвантаження пакетів, спочатку завантажених за допомогою функцій маніпулювання пакета в Базовою Основі.
Це - відповідальність зухвалої сторони гарантувати, щоб ніякі об'єкти в пам'яті або структури даних не ставилися до розвантажувати коду. Наприклад, якщо у Вас є об'єкт, клас якого визначається в пакеті, необхідно випустити той об'єкт до розвантаження пакета. Точно так же Ваш код не повинен намагатися отримати доступ до будь-яких символів, визначених у розвантаженому пакеті.
спеціальні зауваження
До версії 10.5 OS X код не міг бути розвантажений колись завантажений, і цей метод буде завжди повертатися NO false. У версії 10.5 OS X і пізніше, можна розвантажити виконуваний код пакета за допомогою цього методу.