Базовые данные: вывод NSLog Не Показывает “Поля”

Я не понимаю вывода NSLog для массива, возвращенного NSFetchRequest.

Я читаю свою базу данных и помещаю содержание в массив, цикличное выполнение через массив и затем произвожу содержание с NSLog. Я не вполне понимаю вывода в файле журнала. Код ниже:

-(void)createXMLFeed{
    //Fetch details from the database.
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Tabrss" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    NSError *error;
    self.stories = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    //[request release];

    // Count the number of items in the array and display in the log.
    int arrayItemQuantity = [stories count];
    NSLog(@"Array Quantity: %d", arrayItemQuantity);

    // Loop through the array and display the contents.
    int i;
    for (i = 0; i < arrayItemQuantity; i++)
        NSLog (@"Element %i = %@", i, [stories objectAtIndex: i]);

    [stories release]; 

    // Update log file.
    NSLog(@"Database read and XML feed created.");
}

Содержание файла журнала:

2010-06-24 10:09:56.918 TAB RSS[998:207] Array Quantity: 15
2010-06-24 10:09:56.919 TAB RSS[998:207] Element 0 = <NSManagedObject: 0x3b3dcb0> (entity: Tabrss; id: 0x3b06a60 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p22> ; data: <fault>)
2010-06-24 10:09:56.920 TAB RSS[998:207] Element 1 = <NSManagedObject: 0x3b3e1c0> (entity: Tabrss; id: 0x3b14720 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p23> ; data: <fault>)
2010-06-24 10:09:56.920 TAB RSS[998:207] Element 2 = <NSManagedObject: 0x3b3e370> (entity: Tabrss; id: 0x3b1ebd0 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p24> ; data: <fault>)
2010-06-24 10:09:56.921 TAB RSS[998:207] Element 3 = <NSManagedObject: 0x3b3e4e0> (entity: Tabrss; id: 0x3b1ecd0 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p25> ; data: <fault>)
2010-06-24 10:09:56.921 TAB RSS[998:207] Element 4 = <NSManagedObject: 0x3b3e660> (entity: Tabrss; id: 0x3b3b3f0 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p26> ; data: <fault>)
2010-06-24 10:09:56.922 TAB RSS[998:207] Element 5 = <NSManagedObject: 0x3b3e7d0> (entity: Tabrss; id: 0x3b09d20 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p27> ; data: <fault>)
2010-06-24 10:09:56.922 TAB RSS[998:207] Element 6 = <NSManagedObject: 0x3b3e940> (entity: Tabrss; id: 0x3b3cf20 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p28> ; data: <fault>)
2010-06-24 10:09:56.924 TAB RSS[998:207] Element 7 = <NSManagedObject: 0x3b3eac0> (entity: Tabrss; id: 0x3b3cf30 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p29> ; data: <fault>)
2010-06-24 10:09:56.924 TAB RSS[998:207] Element 8 = <NSManagedObject: 0x3b3ec40> (entity: Tabrss; id: 0x3b3cf40 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p30> ; data: <fault>)
2010-06-24 10:09:56.925 TAB RSS[998:207] Element 9 = <NSManagedObject: 0x3b3edb0> (entity: Tabrss; id: 0x3b3cf50 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p31> ; data: <fault>)
2010-06-24 10:09:56.925 TAB RSS[998:207] Element 10 = <NSManagedObject: 0x3b3ef20> (entity: Tabrss; id: 0x3b3cf60 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p32> ; data: <fault>)
2010-06-24 10:09:56.926 TAB RSS[998:207] Element 11 = <NSManagedObject: 0x3b3f090> (entity: Tabrss; id: 0x3b3cf70 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p33> ; data: <fault>)
2010-06-24 10:09:56.926 TAB RSS[998:207] Element 12 = <NSManagedObject: 0x3b3f200> (entity: Tabrss; id: 0x3b3cf80 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p34> ; data: <fault>)
2010-06-24 10:09:56.927 TAB RSS[998:207] Element 13 = <NSManagedObject: 0x3b3f380> (entity: Tabrss; id: 0x3b3cf90 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p35> ; data: <fault>)
2010-06-24 10:09:56.927 TAB RSS[998:207] Element 14 = <NSManagedObject: 0x3b3f500> (entity: Tabrss; id: 0x3b3cfa0 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p36> ; data: <fault>)
(gdb) continue
2010-06-24 10:09:57.932 TAB RSS[998:207] Database read and XML feed created.

Что это означает?:

<NSManagedObject: 0x3b3dcb0> (entity: Tabrss; id: 0x3b06a60 <x-coredata://5B703215-A7D8-4E42-834E-A721D78E84BE/Tabrss/p22> ; data: <fault> 

Я хочу на самом деле видеть содержание поля от базы данных.

У меня есть 15 записей в моей базе данных и 12 полей в каждой записи. От моего основного понимания это похоже на мой stories массив содержит всю запись от базы данных а не отдельных полей. Возможно, мне нужен 2D массив для выполнения этого, если так, как я иду о выполнении этого?

В конечном счете я хочу циклично выполниться через массив и создать XML-тэги для каждого поля. Но один шаг за один раз...

Заранее спасибо, Stephen

5
задан TechZen 26 June 2010 в 17:17
поделиться

2 ответа

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

NSLog (@"Element %i = %@", i, [stories objectAtIndex: i]);

NSLog генерирует описание каждого объекта, когда вы используете% @, которое часто бывает запутанным или бесполезным. Если вы хотите увидеть поля внутри, попробуйте что-то вроде этого:

NSLog (@"Element %i contains fields: %d - %s - %d",i,[[stories objectAtIndex: i] getIntegerField],[[stories objectAtIndex: i] getStringField],[[stories objectAtIndex: i] getAnotherIntegerField]);

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

6
ответ дан 18 December 2019 в 07:53
поделиться

Вывод, который вы видите, взят из метода description класса NSManagedObject. Это просто удобочитаемый вывод, предназначенный для облегченных целей отладки. Вы не должны использовать его для анализа или хранения данных.

Вы не видите никаких подробностей о данных в дампе описания, потому что управляемые объекты были извлечены как «ошибки», что означает, что они являются просто призраками объектов и не содержат реальных данных. Чтобы получить полные объекты немедленно, вы должны настроить запрос на получение с помощью:

[request setReturnsObjectsAsFaults:NO];

... тогда, когда вы регистрируете объекты, вы увидите их данные и отношения.

Чтобы фактически использовать данные в атрибутах, вы должны запросить атрибуты напрямую, используя один из методов значения, например valueForKey: @ "attributeName" .

Редактировать:

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

Вы неправильно думаете о Core Data. Core Data - это не база данных. У него нет полей. Возврат запроса на выборку - это не таблица.

Элементы реляционной базы данных в Core Data совершенно необязательны и скрыты.Вместо этого Core Data - это менеджер графа объектов, который поддерживает целостность отношений между объектами. Данные хранятся в объектах, и при извлечении из постоянного хранилища вы получаете обратно объект, а не поле, столбец или строку.

В этом случае выборка возвращает общий NSManagedObject, который настроен для представления сущности Tabrss в вашем графе сущностей. Каждый экземпляр управляемого объекта представляет собой один логический объект Tabrss . Чтобы получить любое значение из любого объекта Tabrss , вы запрашиваете у управляемого объекта значение, связанное с именем атрибута объекта Tabrss .

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

int i;
for (i = 0; i < arrayItemQuantity; i++)
    NSLog (@"Element %i = %@", i, [[stories objectAtIndex: i] valueForKey:@"name"]);

Или сделать его более явным:

NSManagedObject *aTabrss;
for (aTabrss in stories)
    NSLog(@"aTabrss.name=%@",[aTabrss valueForKey:@"name"]);

Если вы создадите собственный подкласс NSManagedObject для объекта Tabrss , вы может запрашивать атрибут напрямую, используя точечную нотацию:

TabrssSubclass *aTabrss;
for (aTabrss in stories)
    NSLog(@"ATabrss.name=%@",aTabrss.name]);

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

14
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: