Я пытаюсь получить управляемые объекты из Core Data по их URI. Для этого я нашел пример Objective-C метода (http://www.cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html) и превратил его в Swift ...Основные данные - Получить управляемый объект по URI
func getManagedObjectWithURI(uri:NSURL) -> NSManagedObject?
{
if let psc = persistentStoreCoordinator
{
let objID = psc.managedObjectIDForURIRepresentation(uri);
if (objID != nil)
{
let obj:NSManagedObject = managedObjectContext!.objectWithID(objID!);
if (!obj.fault)
{
return obj;
}
let prd = NSComparisonPredicate(leftExpression: .expressionForEvaluatedObject(), rightExpression: NSExpression(forConstantValue: obj), modifier: .DirectPredicateModifier, type: .EqualToPredicateOperatorType, options: .allZeros);
let req = NSFetchRequest();
req.entity = objID?.entity;
req.predicate = prd;
var results:[NSManagedObject] = managedObjectContext!.executeFetchRequest(req, error: nil) as! [NSManagedObject];
if (!results.isEmpty)
{
return results.first;
}
}
}
return nil;
}
Однако метод всегда возвращает ноль, т.е. запрос выборки возвращается с пустыми руками, и я не знаю, почему. До NSFetchRequest все выглядит корректно. Кто-нибудь имеет представление, что может быть неправильным?
NSFetchRequest является ссылочным типом, поэтому «let» vs «var» не имеет никакого значения (и «let» является предпочтительным, если только вам не потребуется назначать другой запрос переменной req. –
Спасибо, что указали это. – Mundi
Нет, еще не повезло. Также после того, как вы попробовали его с предикатной строкой. Я добавил отладочную информацию о предикате и сущности выше, если в них есть что-то подозрительное. Мне не хватает опыта с Core Data, я тоже вижу что-то в этом, что может быть неправильным. – BadmintonCat