2013-01-25 2 views
0

Я разрабатываю приложение для учебных целей. Это синтаксический анализатор, использующий NSXMLParser. Почти все выполняется, за исключением настойчивости. Я изучил архивирование и реализовал его в своем проекте, но чтобы перейти к лучшему решению и улучшить свою квалификацию, я решил перенести свое приложение в Core Data.Основы моделирования данных ядра

Ниже мой синтаксический анализатор. FeedChannel обрабатывает атрибут канала внутри фида feedburner, а также захватывает «элементы», которые обрабатывает файл FeedItem.

FeedChannel.h

#import <Foundation/Foundation.h> 

@interface FeedChannel : NSObject <NSXMLParserDelegate> { 

    NSMutableArray *items; 
    NSMutableString *currentString; 
} 

@property (nonatomic, assign) id parentParserDelegate; 
@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *sDescription; 
@property (nonatomic, readonly) NSMutableArray *items; 

@end 

FeedItem.h

#import <Foundation/Foundation.h> 

@interface FeedItem : NSObject <NSXMLParserDelegate> { 

    NSMutableString *currentString; 

} 

@property (nonatomic, assign) id parentParserDelegate; 
@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *link; 
@property (nonatomic, retain) NSString *creator; 
@property (nonatomic, retain) NSString *pubDate; 
@property (nonatomic, retain) UIImage *thumbnail; 


@end 

Я пытался узнать CoreData, но для новых программистов, это немного сложнее, по-видимому.

В настоящее время я сделал то, что я добавил инфраструктуру CoreData в свой проект, создал файл модели, добавил два объекта с именем FeedChannel и FeedItem. Я не знаю, как это сделать:

1) Должен ли я использовать «Создать управляемый подкласс» в Xcode для перезаписывания существующих файлов или просто указать имя класса в модели данных для каждой записи в панель инспектора или оба подхода одинаковы?

2) Если я использую «Создать управляемый подкласс», он также использует динамический синтез, а я не знаю, влияет ли он на мой проект или нет.

3) Как обрабатывать атрибут миниатюр, поскольку в модели данных основных данных существует тип UIImage.

и самый важный вопрос:

4) Как обращаться с NSMutableArray «пунктов» в файле FeedChannel, который держит элементы в FeedItem? Нужно ли мне каким-то образом наладить отношения «один ко многим»?

Надеюсь, он ответит на весь основной вопрос, связанный с основными данными, с которыми сталкиваются новички. Заранее спасибо.

ответ

1
  1. Ярлык «создать управляемый подкласс» - это просто. Все, что он делает, это подкласс NSManagedObject (vs. NSObject) и создание свойств для всех ваших атрибутов и отношений. Так что нет, вам не нужно его использовать. Вы можете сделать то же самое вручную, если хотите.

  2. Да, свойства управляемых объектов должны быть @dynamic. Это говорит компилятору, что свойство будет разрешено во время выполнения по данным ядра.

  3. Тип transformable, который обрабатывает любой объект - ваши свойства будут иметь тип id, общий объект.

  4. Основные данные заменят ваш массив. У вас будет связь to-many между каналом и элементами фида.Обязательно создайте обратную связь to-one между элементом фида и каналом и пометьте отношения как обратные.

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

+0

Использование преобразуемого типа для изображений, мне нужно использовать «id» в управляемом подклассе или UIImage? поскольку я вручную создаю подклассы вместо использования встроенных опций «создать управляемый подкласс». Также добавьте ссылки на учебные пособия и книги, которые вы упомянули. Спасибо – Jessica

+0

Последнее, что вы объяснили, трудно понять. Сначала вы сказали создать отношения «многие», и вы сказали создать «один». Можете ли вы сказать, как это сделать? Спасибо – Jessica

+0

Это будет 'id', а не UIImage. Core Data распознает только типы данных, которые вы можете выбрать в редакторе модели данных. Все остальное должно быть общим. Это не идеально, потому что вы случайно можете передать другой тип объекта в свойство без предупреждения компиляции, но так оно и работает (пока). –

Смежные вопросы