2012-01-27 3 views
0

У меня есть массив unsigned char в c, который мне нужно хранить на iPhone, и загружать его обратно при необходимости. Самый простой способ объяснить содержимое массива char - это просто шестнадцатеричное или подобное представление о том, как могут нажатия кнопки. (Хотя это намного сложнее, чем это)Сохранение массива символов на iPhone

unsigned char myCounter[28]; 

Я просто хочу знать, что лучший способ сохранить это на iPhone и загрузить его обратно в глобальную переменную. Я попытался преобразовать NSString и обратно. Хотя это работает, я не уверен, как хранить это в глобальной переменной (доступной для всех моих c-функций).

Извините, я абсолютно не знаком с программированием на С.

Заранее спасибо

ответ

0

Если у вас есть как NSString, вы можете позвонить:

[myString writeToFile:filePath atomically:YES encoding: NSUTF8StringEncoding error:&myErr]; 

Вам нужно создать Filepath. Вероятно, это должно указывать на каталог документов вашего приложения или каталог поддержки приложений.

0

Почему вы не можете использовать NSArray? Гораздо приятнее работать с обычными массивами C, особенно если вы «совершенно новы для программирования на C».

0

Один простой способ сохранить NSString для последующего использования через NSUserDefaults.

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 

// set 
[userDefaults setValue:CHAR_ARRAY_CONVERTED_TO_NSSTRING forKey:@"MyKey"]; 

// get 
NSString * savedString = [userDefaults valueForKey:@"MyKey"]; 
0

Я не уверен, хотите ли вы сохранить его в файловой системе или в своем рабочем приложении (или и том и другом). Сохранение файловой системы может быть выполнено с помощью метода user1118321 и sho. Если вы хотите получить доступ к нему по всему миру, мой подход состоял бы в создании класса с общим экземпляром (singleton). Синглтон хранит массив и все время, когда вам нужно будет обращаться к нему с помощью разных классов, вам просто нужно обратиться к singleton и вызвать метод, который возвращает массив.

Как создать одиночек: Correct way to alloc shared instance (singleton)?

заголовок класса будет выглядеть следующим образом:

@interface MyClass : NSObject { 
    unsigned char *myCounter; 
} 
... 
@end 

В пределах вашего метода инициализации из MyClass вам нужно установить указатель с:

... 
myCounter = new char[28]; 
... 

И доступ счетчик вы можете создать геттер, например:

- (char*)getCounter 
{ 
    return myCounter; 
} 

Всякий раз, когда вы хотели бы иметь доступ к массиву, импортировать заголовок MyClass и ссылки на массив по телефону:

char *array = [[MyClass sharedInstance] getCounter]; 

Однако, вы не будете знать количество записей в массиве (как это C-Array). Я хотел бы предложить, чтобы определить директиву препроцессора как

#define kArraySize 28 

в файле заголовка класса, и которые могут быть использованы для Alloc массив и знать его размер где-нибудь еще в вашем коде. Если доступ для записи/чтения к этому массиву очень ограничен, я предлагаю вам пойти с NSArray.

1

Если это просто произвольные байты, NSData является лучшим способом OO-ish для представления произвольных массивов байтов, подобных этому.

NSData *counterAsObject = [NSData dataWithBytes:myCounter length:28]; 
// and then you can… 
[counterAsObject writeToFile:whereverYouWantToStoreIt atomically:YES]; 

Вы также можете сохранить NSData в списках свойств, если это часть некоторой более крупной конфигурации, которую вы хотите сохранить вместе.

Если это предназначено для текста, вы можете просто сделать из него NSString (вы, вероятно, захотите сделать это, чтобы взаимодействовать с остальной частью Cocoa Touch в любом случае).

Смежные вопросы