Objective c 如何将核心数据放入阵列阵列中?与Dave DeLong的CHCSVWriter一起使用
我认为这很简单,但我对Objective-C、IOS和核心数据还不熟悉 我有一个名为InquiryStore的核心数据实体,它包含各种属性名称、地址、查询等 我可以很好地获取结果,但我很难理解结果是如何存储的!这使得我很难完成程序的下一部分,即使用Dave DeLong的CHCSVWriter将数据导出到CSV。我明白这一点Objective c 如何将核心数据放入阵列阵列中?与Dave DeLong的CHCSVWriter一起使用,objective-c,arrays,ios,core-data,csv,Objective C,Arrays,Ios,Core Data,Csv,我认为这很简单,但我对Objective-C、IOS和核心数据还不熟悉 我有一个名为InquiryStore的核心数据实体,它包含各种属性名称、地址、查询等 我可以很好地获取结果,但我很难理解结果是如何存储的!这使得我很难完成程序的下一部分,即使用Dave DeLong的CHCSVWriter将数据导出到CSV。我明白这一点 [array writeToCSVFile:outputCSVFile atomically: NO]; 它将接受一个数组,这是核心数据给我的吗?因为我不能用那种方法工作
[array writeToCSVFile:outputCSVFile atomically: NO];
它将接受一个数组,这是核心数据给我的吗?因为我不能用那种方法工作
我可以用
[myCSVWriter writeField: ...];
[myCSVWriter writeLine];
但这似乎很冗长,因为我将不得不从核心数据的每个属性构建字符串。您是唯一知道NSManagedObject外观的人,它可能具有无法放入csv文件的关系。它可能有二进制数据,这在csv文件中不是很有用。或者它可能只是具有您不想导出的属性。您还必须决定csv的导出顺序 创建NSArray(即要导出NSArray的NSManagedObject的列表)很容易,即该对象的导出属性列表。只需枚举所有NSManagedObject,并用要导出的值填充一个数组 您可以使用以下内容:
NSArray *objectsForExport = ... /* get it through a fetch request... helper function... whatever */
NSArray *exportKeys = [NSArray arrayWithObjects:@"foo", @"bar", @"name", @"city", @"address", nil];
NSMutableArray *csvObjects = [NSMutableArray arrayWithCapacity:[objectsForExport count]];
for (NSManagedObject *object in objectsForExport) {
NSMutableArray *anObjectArray = [NSMutableArray arrayWithCapacity:[exportKeys count]];
for (NSString *key in exportKeys) {
id value = [object valueForKey:key];
if (!value) {
value = @"";
}
[anObjectArray addObject:[value description]];
}
[csvObjects addObject:anObjectArray];
}
这就是你的数组
我相信有一个方法,如果你给它传递一个NSArray键,它会返回一个NSArray值,但是我找不到它,我也记不起它的名字,甚至记不起它属于哪个类 虽然writeField:approach看似冗长,但它也是最具描述性的:
CHCSVWriter *writer = [[CHCSVWriter alloc] initWithCSVFile:@"/Path/To/CSV/File.csv" atomically:NO];
NSArray *myArrayOfManagedObjects = ...;
for (NSManagedObject *obj in myArrayOfManagedObjects) {
[writer writeField:[obj valueForKey:@"attribute1"]];
[writer writeField:[obj valueForKey:@"attribute2"]];
[writer writeField:[obj valueForKey:@"attribute3"]];
[writer writeField:[obj valueForKey:@"attribute4"]];
[writer writeLine];
}
[writer closeFile];
[writer release];
请注意,writeField:将id作为参数,而不是NSString*。您可以传递任何想要的对象,CHCSVWriter将获取对象的-描述并写出它。这种情况甚至会发生在传递的NSString对象上,因为必须对值进行一些修改,例如确定字段是否需要引用。values注释:这可能是您在10.3 Hanks Dave中不赞成的,因为有更多的解释。您的CSV编写器在我的项目中似乎工作得很好。