Экспорт основного объекта данных в виде текстовых файлов в какао - PullRequest
1 голос
/ 02 апреля 2010

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

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

1 Ответ

8 голосов
/ 02 апреля 2010

Вы когда-нибудь задумывались над этапами?

  1. Создать запрос на выборку (возможно с предикатом, если вы хотите фильтровать результаты).
  2. Выполнить запрос на выборку. Если успешно ...
  3. Для каждого экземпляра в массиве возвращаемых результатов ...
  4. Создайте путь, используя атрибут "name".
  5. Запишите строку «message» в путь, который вы только что создали.
  6. Следующий экземпляр ...

После того, как вы определили шаги, совсем не сложно найти соответствующие части документации , чтобы выяснить, как выполнять каждый шаг.

Вы могли бы фактически выполнить это в трех строках кода, если вы включили некоторые вещи и уже убедились, что целевая папка доступна для записи и не заботится о перезаписи.

Update

Хорошо, так что это занимает минимум четыре строки, так как вы не можете инициировать запрос на выборку с описанием сущности, если вы игнорируете ошибки выборки. Так как вы попросили код:

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