Export Core Data Entity as text files in Cocoa

后端 未结 1 647
無奈伤痛
無奈伤痛 2021-02-03 16:40

I have an entity in core data that has 2 Attributes. One that is a string called \"name\", and another one that is a string called \"message\". I need a method to create text fi

相关标签:
1条回答
  • 2021-02-03 17:12

    Have you given any thought at all to the steps involved?

    1. Create a fetch request (possibly with a predicate if you want to filter the results).
    2. Execute the fetch request. If successful ...
    3. For each instance in the returned results array ...
    4. Create a path using the "name" attribute.
    5. Write the "message" string to the path you just created.
    6. Next instance...

    Once you've identified the steps, it's not difficult at all to look up the relevant parts of the documentation to figure out how to do each step.

    You could actually perform this in three lines of code if you inline some things and have already verified the target folder is writable and don't care about overwriting.

    Update

    Okay, so it takes a minimum of four lines since you can't init a fetch request with an entity description, assuming you ignore fetch errors. Since you asked for the code:

    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]
    };
    

    Of course this isn't very readable (ie, it's ugly) and makes all sorts of assumptions, but you get the point. Here's a more complete (and illustratively verbose) way:

    // 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];
    }
    
    0 讨论(0)
提交回复
热议问题