2012-01-27 42 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的其余部分进行交互)。