2012-01-27 67 views
0

我在c中有一個unsigned char數組,需要在iPhone上存儲並在需要時加載此數組。 解釋char數組內容最簡單的方法就是一個十六進制或類似的表示按鈕被按下的次數。 (雖然它的很多比這更復雜)將字符數組保存到iPhone

unsigned char myCounter[28]; 

我只是想知道的最佳方式是存儲這個在iPhone和背部加載到一個全局變量是什麼。我曾嘗試轉換爲NSString,然後再返回。雖然這有效,但我不確定如何將其存儲到全局變量中(可用於我的所有c函數)。

對不起,我完全是C編程的新手。

在此先感謝

回答

0

如果你把它作爲一個NSString,您可以撥打:

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

你需要創建文件路徑。它應該可能指向您的應用程序的文檔目錄或應用程序支持目錄。

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的你的init方法,你需要設置指針搭配:

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

並訪問你可以創建一個吸氣的計數器例如:

- (char*)getCounter 
{ 
    return myCounter; 
} 

每當你想有訪問陣列,導入MyClass的頭,並通過調用引用數組:

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

然而,你不會知道的條目數陣列中(因爲它是一個C-陣列)。 我會建議你的類的頭文件中定義一樣

#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的其餘部分進行交互)。