сообщения о неисправности coredata - PullRequest
2 голосов
/ 26 января 2012

Я печатаю содержимое управляемой записи в файл. У меня есть одна основная сущность, скажем, MyAppEntity, и несколько связанных сущностей (Люди, Место и т. Д.).

Я вижу этот вывод из файла:

/Users/david/Library/Application Support/iPhone Simulator/5.1/Applications/C9ACA218-F2D6-4623-8CAF-5FE763D10FC8/Documents/
 MyApp-0001 12.01.25 
 Summary goes here... 
 Nothing here yet. 
 Relationship 'people' on managed object (0x79eaf7f0) <NSManagedObject: 0x79eaf7f0> (entity: MyAppEntity; id: 0x79eae950 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/MyAppEntity/p1> ; data: {
    audioName = 00010125121910;
    audioNo = 0;
    date = nil;
    MyApp = "MyApp-0001 12.01.25";
    interpret = "Nothing here yet.";
    keyword =     (
    );
    order = 0;
    people =     (
        "0x79ee42f0 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PeopleEntity/p1>",
        "0x79ee4300 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PeopleEntity/p2>"
    );
    place =     (
        "0x79ee6970 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PlaceEntity/p2>",
        "0x79ee6960 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PlaceEntity/p1>"
    );
    recurring = 0;
    summary = "Summary goes here...";
    symbol =     (
    );
    type =     (
    );
}) with objects {(
    <NSManagedObject: 0x79ee47e0> (entity: PeopleEntity; id: 0x79ee42f0 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PeopleEntity/p1> ; data: {
    definition = nil;
    name = me;
    order = 0;
    people = "<relationship fault: 0x79ef5ce0 'people'>";
}),
    <NSManagedObject: 0x79ee4a70> (entity: PeopleEntity; id: 0x79ee4300 <x-coredata:/B86C9CA8-EDE4-452C-BA56-FEF50B4F0FF9/PeopleEntity/p2> ; data: {
    definition = nil;
    name = you;
    order = 1;
    people = "<relationship fault: 0x79e60840 'people'>";
})
)} 

У меня два вопроса ... Во-первых, что означают сообщения об ошибках? и во-вторых, как я могу получить значения, скажем, people.name или place.name ..?

Я могу опубликовать диаграмму модели данных, но в основном это выглядит так:

MyAppEntity: атрибуты: заглавие Дата подробности Отношения людей, места и пр.

PeopleEntity: Атрибуты: название Описание порядок Отношения: люди

PlaceEntity: атрибуты: название Описание порядок Отношения: место

Отношения многие ко многим. Это связано с тем, что в одной задаче может быть много людей, и одни и те же люди могут работать над несколькими задачами.


Спасибо Джерри и Маркусу Зарре в другом посте . Я наконец получил это .. Если это помогает другим, вот мой код:

NSManagedObjectContext *context = [self managedObjectContext];  
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *mainEntity = [NSEntityDescription entityForName:@"MainEntity" inManagedObjectContext:context];

    [fetchRequest setEntity:mains]; 
    NSError *error = nil;   
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];


    NSLog(@"Record Count is: %i", [fetchedObjects count]);

    // THIS ACTUALLY WORKS.....

     for (MainEntity *mains in fetchedObjects) {
     NSLog(@"Main: %@", mains.name);
         NSSet *peopleSet = [mains valueForKey:@"people"];   
         for (id person in peopleSet) {
             NSLog(@"name = %@", [person valueForKey:@"name"]);
         }
         NSSet *keywordSet = [mains valueForKey:@"keyword"];     
         for (id keyWord in keywordSet) {
             NSLog(@"Keyword = %@", [keyWord valueForKey:@"word"]);
         }
         NSSet *placeSet = [mains valueForKey:@"place"];     
         for (id places in placeSet) {
             NSLog(@"Place = %@", [places valueForKey:@"name"]);
         }
         NSSet *symbolSet = [mains valueForKey:@"symbol"];   
         for (id symbols in symbolSet) {
             NSLog(@"Symbol = %@", [symbols valueForKey:@"symbolName"]);
         }
         NSSet *typeSet = [mains valueForKey:@"type"];   
         for (id types in typeSet) {
             NSLog(@"Type = %@", [types valueForKey:@"typeName"]);
         }
     }

    if (!fetchedObjects || error) {
        NSLog(@"[ERROR] COREDATA: Fetch request raised an error - '%@'", [error description]);
        return;
    }

1 Ответ

7 голосов
/ 26 января 2012

Неисправности используются, так что данные могут быть загружены только тогда, когда это необходимо. Когда вы получите доступ к отношениям, они будут загружены. См. Неисправность и уникальность в Руководство по программированию основных данных .

Как только вы получите доступ ко многим отношениям, у вас будет набор. Вы можете перечислить набор и получить доступ к атрибутам отдельных управляемых объектов. Например (при условии, что appObject является экземпляром MyAppEntity):

for (id person in [appObject valueForKey:@"people"]) {
    NSLog(@"name = %@", [person valueForKey:@"name"]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...