Подтвердить что ты не робот

Есть ли у кого-нибудь рабочий пример выделенной собственности в базовых данных?

Я пытаюсь использовать выбранные свойства пару раз, и хотя он кажется правильным, он никогда не работает.

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

Проблема 1: Когда генерируется класс NSManagedObject для сущности, он не содержит ничего для свойства fetched. После некоторого поиска я добавил объявление для него в файл .h и инструкцию @dynamic для него в файле .m(да, я знаю его тип NSArray *).

Проблема 2: Даже после этого, когда я получаю доступ к этому свойству в коде, я получаю исключение, которое указывает что-то, что у запроса выборки нет сущности. Я предполагаю, что "сущность" будет той, что указана как "пункт назначения", и это, на самом деле, есть.

Итак, я хотел бы, чтобы кто-то предоставил конкретный рабочий пример (платформа iOS), где в модели определено свойство fetched-property, объявленное в классе NSManagedObject и фактически используемое из кода.

В этот момент я отказываюсь от этого времени и просто реализую код запроса-запроса.

4b9b3361

Ответ 1

Здесь мои соответствующие биты кода (включая биты, которые вы уже упоминали):

В моем примере есть объект "Карта" , у которого есть 1 > много отношений с объектом "Статистика" . Каждый объект "Stats" имеет "результат", который может быть 1-4. Моя загруженная собственность является простой, чтобы дать моему объекту "Карта" массив объектов "Статистика" , которые имеют только "результат" = 1.

Я хотел использовать свойство fetched, чтобы я мог легко получить объекты "Card", у которых было больше определенного количества и типов объектов "Stats".

Итак, в объекте "Карточка" я помещаю свойство Fetched Property "statsOfTypeOne", с пунктом назначения установлено значение "Статистика" .

В предикате для этого выбранного свойства я помещаю

(SELF.outcome=1) AND (SELF.card=$FETCH_SOURCE)

'SELF' - это запись 'stats', и $FETCH_SOURCE волшебным образом становится объектом 'Card' при выполнении.

Как и вы, я добавил следующие файлы в .h и .m для объекта "Карта" :

@property (nonatomic, retain) NSArray *statsOfTypeOne;
@dynamic statsOfTypeOne;

Тогда в моем коде я использовал:

[self.managedObjectContext refreshObject:cardInstance mergeChanges:YES];
[cardInstance valueForKey:@"statsOfTypeOne"]

чтобы получить в массиве (хотя cardInstance.statsOfTypeOne должно быть хорошо). Без объекта обновления он не обновлял свойство Fetched (в соответствии с руководством).

Я думаю, что все, что я сделал, чтобы заставить его работать. Дайте мне знать, если это сработает для вас.

Петр

Ответ 2

Добавление в ответ @Peter. Вот как я работал в Swift 2.0 и Xcode 7:

import Foundation
import CoreData

@objc(Card)
class Card: NSManagedObject {

    @NSManaged var statsOfTypeOne: [Stat]

}

И затем, чтобы прочитать полученное свойство:

managedObjectContext.refreshObject(someCard, mergeChanges: true)
// This works and returns [Stat] type
someCard.statsOfTypeOne
// So does this
someCard.valueForkey("statsOfTypeOne") as! [Stat]