如何将Core Data数据导入阵列数组?适用于Dave DeLong的CHCSVWriter

时间:2011-03-06 11:55:54

标签: objective-c arrays ios core-data csv

我认为这很简单,但我是Objective-C,IOS和核心数据的新手。

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

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

[array writeToCSVFile:outputCSVFile atomically: NO];

它会接受一个阵列数组,这是Core Data给我的吗?因为我无法使用该方法。

我可以用

[myCSVWriter writeField: ...];
[myCSVWriter writeLine];

但这似乎很长,因为我必须从Core Data的每个属性构建字符串。

2 个答案:

答案 0 :(得分:3)

您是唯一知道NSManagedObject外观的人,它可能具有无法放入csv文件的关系。它可能具有二进制数据,这在csv文件中不是很有用。或者它可能具有您不想导出的属性。而且你必须决定你希望你的csv导出的顺序。

很容易创建NSArray的NSArray(即要导出的NSManagedObjects列表)(即该对象的导出属性列表)。只需枚举所有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键,但我找不到它,我记不起它的名字,甚至不记得它属于哪个类。

答案 1 :(得分:2)

虽然“writeField:”方法可能看起来很长,但它也是最具描述性的:

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将抓取对象的-description并将其写出来。 (这甚至发生在传入的NSString个对象中)这是因为必须对值进行一些修改(例如确定字段是否需要引用)。