将核心数据实体导出为Cocoa中的文本文件

nos*_*e25 1 cocoa attributes entity core-data text-files

我在核心数据中有一个具有2个属性的实体.一个是名为"name"的字符串,另一个是名为"message"的字符串.我需要一种方法来为用户添加的所有属性创建文本文件.我不希望文件名是name属性,内容是message属性.如果有人知道怎么做,任何帮助都会很棒.

谢谢你的帮助

Jos*_*zzi 8

您是否对所涉及的步骤有任何想法?

  1. 创建一个获取请求(如果要过滤结果,可能使用谓词).
  2. 执行获取请求.如果成功......
  3. 对于返回结果数组中的每个实例...
  4. 使用"name"属性创建路径.
  5. 将"message"字符串写入刚刚创建的路径.
  6. 下一个例子......

一旦确定了这些步骤,就可以查阅文档的相关部分以了解如何执行每个步骤.

如果您内联一些内容并且已经验证目标文件夹是可写的并且不关心覆盖,那么您实际上可以在三行代码中执行此操作.

更新

好的,所以它至少需要四行,因为你无法使用实体描述初始化获取请求,假设你忽略了获取错误.既然你要了代码:

NSFetchRequest *fr = [[[NSFetchRequest alloc] init] autorelease];
[fr setEntity:[NSEntityDescription entityForName:@"EntityName" 
                          inManagedObjectContext:[self managedObjectContext]]] 
        error:nil];
NSArray *results = [[self managedObjectContext] executeFetchRequest:fr error:nil];
for (id result in results){
    [[result valueForKey:@"message"] writeToFile:[basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.txt", [result valueForKey:@"name"]]]
              atomically:NO]
};
Run Code Online (Sandbox Code Playgroud)

当然这不是很易读(也就是说,它很丑陋)并做出各种各样的假设,但你明白了.这是一个更完整(并且说明性冗长)的方式:

// Create the fetch request
NSFetchRequest * fr = [[[NSFetchRequest alloc] init] autorelease];
[fr setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:[self managedObjectContext]]];

// Execute the fetch request
NSError * error = nil;
NSArray * results = [[self managedObjectContext] executeFetchRequest:fr error:&error];
if (results)
{
    // Process the results
    NSString * name;
    NSString * message;
    NSString * path;
    for (id result in results)
    {
        // Figure out this result's info
        name = [result valueForKey:@"name"];
        message = [result valueForKey:@"message"];
        path = [basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.txt", name]];

        // Write the message to the predetermined path
        [message writeToFile:path atomically:NO];
    }
} else {
    // Error fetching results, so present error to user
    [NSApp presentError:error];
}
Run Code Online (Sandbox Code Playgroud)