Так, я читал это сообщение, и это в значительной степени точно, что я искал. Однако... это не работает. Я предполагаю, что не собираюсь идти с одноэлементным объектом, а скорее делаю массив или в файле Global.h или вставляю его в _Prefix файл.
Оба раза я делаю это, хотя, я получаю ошибку:
Ожидаемый список спецификатора спецификатора прежде 'статичный'
и это не работает. Так... Я не уверен, как заставить это работать, я могу удалить экстерна, и это работает, но я чувствую, что мне нужно это для создания этого константой.
Конечная цель должна иметь этот Изменяемый Массив быть доступной от любого объекта или любого файла в моем проекте. Справка ценилась бы!
Это - код для моего файла Globals.h:
#import
static extern NSMutableArray * myGlobalArray;
Я не думаю, что мне нужно что-либо в файле реализации. Если я должен был поместить это в файл префикса, ошибка была тем же.
Править
Так, я удалил.m файл из Globals, и у меня просто есть код о в Globals.h. Принятие я собираюсь продолжить эту ужасную практику наличия глобальных переменных (я знаю, что это плохо, я просто, хочет проверить это), у меня теперь есть новая ошибка. Это говорит:
"Несколько классов памяти в спецификаторах объявления"
Если я удаляю "экстерна", это работает и если я удаляю "статичный", это работает, но имеющий обоих не делает... что теперь?
**** Двойное Редактирование ****
Правильно, таким образом, я попытался добавить массив к своему Делегату UIApplication, но я делаю его неправильно, потому что он не работает. Кто-то мог дать мне некоторый пример кода как, туда, где поместить его доступ он? Я не знаю, должно ли это войти в реализацию, или где-то в другом месте, и после того как массив инициализируется, как получить доступ к нему из других файлов... Я устанавливаю новую переменную на массив или что-то?
Это то, что я искал:
http://derekneely.com/tag/app-delegate/
Спасибо, что указали меня в правильном направлении!
Просто общее предложение по программированию - не делитесь массивом. У вас нет контроля над ним, и будет практически невозможно отследить, если что-то изменит его в то время и так, как вы не ожидаете.
Вместо этого создайте объект с массивом внутри него и сделайте этот объект синглтоном (или, что еще лучше, создайте для него фабрику).
Всякий раз, когда вы хотите изменить массив, вызывайте методы объекта, чтобы сделать это. Если вы сделаете это, я готов поспорить, что вы найдете много избыточного кода, который можно поместить в этот объект (например, поиск значения в массиве - сделайте метод "search" в объекте и передайте значение).
Это может показаться большой работой, которую вы не должны делать, но вы обнаружите, что это довольно забавная работа, и вы обнаружите, что вы ДОЛЖНЫ ее делать, когда увидите, сколько кода содержится в этом объекте...
В общем, наличие файла "Globals.h" - неприятный запах того, что работает антипаттерн.
Я бы даже посоветовал не советоваться с Биллом К. и вообще не использовать шаблон Singleton.
Вместо этого создайте массив в делегате вашего приложения и передайте его контроллеру (-ам) корневого представления и по иерархии компонентам, которым требуется доступ к нему.
#import <Foundation/Foundation.h>
static extern NSMutableArray * myGlobalArray;
@interface Globals : NSObject {
}
@end
два (основных) способа сделать массив глобальным являются отдельными - либо у вас есть класс с методом
static NSMutableArray *foo;
+(NSMutableArray *)foo {
return foo;
}
(в файле .m) со статической частью НЕ в файле заголовка, либо просто
static extern NSMutableArray * myGlobalArray;
без singleton wrapper (который, как мне кажется, лучше, так как избавляет вас от лишнего лишнего кода)
В любом случае, это все еще плохая практика, которой я бы постарался избежать.
Просто добавьте массив как свойство делегата приложения и получите к нему доступ, например:
[[UIApplication sharedApplication] myArray];