Объявление свойства для к - много отношений в Базовых Данных

Исправлено: вызывали urllib.parse.urlencode для преобразования dict в строку, а затем явно устанавливали тип содержимого:

    postparam = urllib.parse.urlencode({"ID": theId}).encode('utf-8')
    req = Request(url, method='POST', data=postparam)
    req.add_header("content-type", "application/x-www-form-urlencoded")
    r = urlopen(req)
9
задан Chris Hanson 17 May 2009 в 11:41
поделиться

2 ответа

Отношения «один к одному» моделируются как объектные ссылки с помощью Core Data. Таким образом, однозначное отношение от сущности Bar к сущности Baz (при условии, что Baz реализовано классом Baz ) будет

@interface Bar : NSManagedObject {
}

@property (readwrite,nonatomic) Baz * toBaz;

@end

] Отношения ко многим моделируются как свойство изменяемого набора (хотя не как NSMutableSet ). Предполагая отношение ко многим от Bar до Baz , вызывается manyBazz :

@interface Bar : NSManagedObject {

}

@property (retain) NSSet* manyBazz;

@end

// coalesce these into one @interface AnalysisRecord (CoreDataGeneratedAccessors) section
@interface Bar (CoreDataGeneratedAccessors)
- (void)addManyBazzObject:(Baz *)value;
- (void)removeManyBazzObject:(Baz *)value;
- (void)addManyBazz:(NSSet *)value;
- (void)removeManyBazz:(NSSet *)value;

@end

Если вы хотите использовать интерфейс NSMutableSet для управления manyBazz , вы должны вызвать -mutableSetValueForKey: @ "manyBazz" , чтобы получить KVO-совместимый прокси для отношения manyBazz .

В Leopard (OS X 10.5) и более поздних версиях , все соответствующие методы автоматически генерируются во время выполнения платформой Core Data, даже если вы явно не объявляете или не реализуете их (вы, конечно, получите предупреждение компилятора, если попытаетесь использовать их, не объявляя их в файле заголовка ). Таким образом, вам не требуется для подкласса

. Самый простой способ получить правильное объявление и реализацию - выбрать атрибуты в средстве моделирования данных и выбрать «Копировать объявления метода Objective-C 2.0 в буфер обмена» из Меню «Дизайн-> Модель данных» вставьте в файл .h ваших классов реализации. Конечно, вы должны поддерживать синхронизацию вашего .h и модели ... отсюда сердечная рекомендация по поводу потрясающего MO Generator от rentzsch, инструмента, который автоматически генерирует (и повторно генерирует) подклассы NSManagedObject из ваших данных. модель.

18
ответ дан 4 December 2019 в 06:35
поделиться

Самый простой способ создать файлы .h и .m для ваших сущностей CoreData:

  1. Выберите сущность в средстве моделирования данных.
  2. Нажмите Command-N или выберите File- > Новый файл…
  3. Выберите «Какао» из списка источников.
  4. В средстве выбора шаблона вы должны теперь увидеть элемент под названием «Класс управляемых объектов». Если этого нет, нажмите «Отмена» и повторите шаги 1-2.
  5. Нажмите «Далее», выберите проект / цель и снова нажмите «Далее».
  6. Теперь вы видите примерно следующее окно: Новое управляемое Окно класса объекта http://blog.alanquatermain.net/images/ManagedObjectClass.png
  7. Выберите нужные параметры и нажмите «Готово».

Это создаст следующие заголовочные и исходные файлы:

Entity.h:

#import <CoreData/CoreData.h>


@interface Entity :  NSManagedObject  
{
}

@property (retain) NSNumber * uniqueID;
@property (retain) NSString * name;
@property (retain) Entity * parent;
@property (retain) NSSet* children;

@end

@interface Entity (CoreDataGeneratedAccessors)
- (void)addChildrenObject:(Entity *)value;
- (void)removeChildrenObject:(Entity *)value;
- (void)addChildren:(NSSet *)value;
- (void)removeChildren:(NSSet *)value;

@end

Entity.m:

#import "Entity.h"


@implementation Entity 

@dynamic uniqueID;
@dynamic name;
@dynamic parent;
@dynamic children;

@end

Обратите внимание, что реализация не

16
ответ дан 4 December 2019 в 06:35
поделиться