Экспорт объекта основных данных в виде текстовых файлов в Cocoa

У меня есть сущность в основных данных, которая имеет 2 атрибута. Один представляет собой строку с именем «имя», а другой — строку с именем «сообщение». Мне нужен метод для создания текстовых файлов для всех атрибутов, которые добавил пользователь. Я не хочу, чтобы имена файлов были атрибутом имени, а содержимое - атрибутом сообщения. Если кто-нибудь знает, как это сделать, любая помощь будет отличной.

Спасибо за любую помощь


person nosedive25    schedule 02.04.2010    source источник


Ответы (1)


Вы вообще задумывались о предпринимаемых шагах?

  1. Создайте запрос на выборку (возможно, с предикатом, если вы хотите отфильтровать результаты).
  2. Выполните запрос на получение. В случае успеха...
  3. Для каждого экземпляра в возвращаемом массиве результатов...
  4. Создайте путь, используя атрибут «имя».
  5. Напишите строку «сообщение» в путь, который вы только что создали.
  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]
};

Конечно, это не очень читабельно (т.е. уродливо) и делает всевозможные предположения, но вы поняли. Вот более полный (и иллюстративно подробный) способ:

// 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];
}
person Joshua Nozzi    schedule 02.04.2010
comment
Я так и сделал, но в будущем в ваших же интересах хотя бы попробовать найти информацию в документации. Улучшение ваших навыков исследования сделает вас лучшим разработчиком. - person Joshua Nozzi; 02.04.2010