0

我是 iOS 新手,但对 c++ 和 Python 有丰富的经验。我试图弄清楚如何将我计算机上的纯文本文件读入 xcode 中的 NSArray。在 C++ 中,我会这样做:

while(istr>>string) myArray.push_back(string);

但是,我需要创建一个本地副本以存储在 iOS 设备上。有没有办法可以打包这些数据,以便将 JUST THE ARRAY 的本地副本存储在设备上?我在想也许用 JSON 序列化或其他东西做点什么。我真的应该把它吸起来并这样做:

NSArray myArray = [[NSArray alloc] initWithObjects: @"myInfo", nil];

我想我只是想要一种更优雅的方式来处理这个问题。

4

2 回答 2

3

我想也许你对这个有点太 C 了。在 C 和 C++ 中,字符串是字节数组。在 ObjC 中,有一个对象。它被称为 NSString,它可能是您应该存储明文的内容。

如果您已经有一个字节数组,它甚至还有一个简单的类方法可以帮助您解决这个问题:

+(id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc

有关详细信息,请参阅NSString 文档。

至于将其存储在设备上,有从简单的 ( NSUserDefaults) 到复杂的 ( Core Data ) 的解决方案,但几乎任何东西都希望纯文本保存在NSString.

编辑: 这个问题的标题谈到从文件系统中读取字符串。第一步是将文件的字节放入NSData对象中。简单的方法:

+(id)dataWithContentsOfFile:(NSString *)path

然后使用以下初始化器从数据中创建一个字符串NSString

-(id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding

于 2013-04-06T23:37:04.720 回答
0

我不知道这是否可以帮助您,无论如何,如果您只需要将一组数据存储到文件系统并将其反序列化回 NSArray,那么一种简单的方法是使用 plist。这是一种存储少量数据的便捷方式,没有任何关系(有 Core Data)。主要优点是您可以在其中存储 NSArray、NSDictionary、NSNumber、NSString、NSDate 和 NSData(任何类型的二进制信息),并且它们可以通过一些简单的方法自动序列化和反序列化。

您可以通过这种方式将 NSArray 写入文件:

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

并用这个反序列化它:

+ (id)arrayWithContentsOfFile:(NSString *)aPath

如果您只想为您的应用程序提供一些初始数据,例如字符串数组或类似的东西,您可以通过转到 File->New->File 并选择 Resources-> 手动将 plist 添加到您的项目中财产清单,并手工填写。

您可以在https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html阅读更多内容

于 2013-04-07T00:23:54.687 回答