我最近需要实现类似的目标。
我项目团队的几个成员想把我们的应用原型拿出来展示给潜在客户,但想向每个客户展示不同的数据。我们通过允许我们的项目团队成员在与客户会面之前创建自己的测试数据来解决这个问题。
我通过创建一个示例 .csv 文件并将其分发给项目团队中的其他人来实现这一点。他们用自己的测试数据填充它,并使用 iTunes 文件共享将 .csv 测试数据文件放到设备上。
加载时,应用程序会扫描其 Documents 目录以查找测试数据文件。如果存在,它会解析 .csv 文件并保存到数据库中。
对于 CSV 解析,我使用了 Dave DeLong 的 CHCSVParser:https ://github.com/davedelong/CHCSVParser
在为您的应用程序设置 iTunes 文件共享方面提供了大量帮助。一个快速的谷歌发现这个教程(http://www.raywenderlich.com/1948/how-integrate-itunes-file-sharing-with-your-ios-app)应该可以帮助你,如果你需要它。
编辑 - 添加了有关在 Core Data 中存储 .csv 数据的帮助
您在原始帖子中声明您存储了一个 NSNumber 和 NSDate。以此为起点,您可能有一个 .csv 文件,格式如下:
+----------------+--------------+
+ NSNumberColumn | NSDateColumn |
+----------------+--------------+
+ 1 | 2013-05-15 |
+ 2 | 2013-06-15 |
+ 3 | 2013-07-15 |
+----------------+--------------+
假设 CSV 解析器的输出是 NSArray 的 NSArray,您可以按如下方式创建 Core Data 对象:
我会为列号创建几个宏:
#define NSNumberColumn 0
#define NSDateColumn 1
然后遍历 .csv 文件中的行:
NSArray *rows = [NSArray arrayWithContentsOfCSVFile:pathToFile]; //CHCSVParser specific parsing method
for (NSArray *row in rows)
{
NSString *numberString = [parsedCsvRow objectAtIndex:NSNumberColumn];
NSString *dateString = [parsedCsvRow objectAtIndex:NSDateColumn];
NSNumber *number = // parse numberString to an NSNumber. Plenty of other posts on achieving this.
NSDate *date = // parse NSDate from dateString. Plenty of other posts on achieving this.
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *myCoreDataObject = [NSEntityDescription insertNewObjectForEntityForName:@"MyCoreDataObject" inManagedObjectContext:context];
[myCoreDataObject setValue:number forKey:@"NSNumberColumn"];
[myCoreDataObject setValue:date forKey:@"NSDateColumn"];
NSError *error;
if (![context save:&error]) {
NSLog(@"%@", [error localizedDescription]);
}
}
注意:为简洁起见,省略了输入验证和空值检查。我还冒昧地编造了您的 NSManagedObject 属性名称,这需要更新。上面的代码应该被分成更合适的类结构。
我现在不在 Mac 上,所以很遗憾我无法检查这是否有效。
希望有帮助。