Objective c 如何将核心数据放入阵列阵列中?与Dave DeLong的CHCSVWriter一起使用

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]; 它将接受一个数组,这是核心数据给我的吗?因为我不能用那种方法工作

我认为这很简单,但我对Objective-C、IOS和核心数据还不熟悉

我有一个名为InquiryStore的核心数据实体,它包含各种属性名称、地址、查询等

我可以很好地获取结果,但我很难理解结果是如何存储的!这使得我很难完成程序的下一部分,即使用Dave DeLong的CHCSVWriter将数据导出到CSV。我明白这一点

[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编写器在我的项目中似乎工作得很好。