Comment puis-je faire une demande de récupération à l'aide de NSManagedObject nouveau fetchRequest fonction?
Dans iOS 10 le CoreData équipe a ajouté un nouveau "fetchRequest" méthode de NSManagedObject. Il ressemble à ceci:
public class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
Qui, d'après ce que je comprends, nous permet de remplacer ceci:
let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")
avec ceci:
let request = MyEntity.fetchRequest()
Cependant, lorsque je tente de faire une simple requête comme ceci:
let request = MyEntity.fetchRequest()
do {
results = try request.execute()
} catch let error {
print("failed to fetch coffee object: \(error)")
}
Je reçois l'erreur suivante:
Erreur de Domaine=NSCocoaErrorDomain Code=134060 "(null)"
UserInfo={message=Ne peut pas récupérer sans NSManagedObjectContext dans
champ d'application}
Il apparaît donc clairement que l'erreur est en indiquant que je dois apporter un NSManagedObjectContext dans l'étendue. J'ai été à la recherche pour des exemples, mais peut sembler à trouver un exemple complet de la façon d'effectuer une demande à l'aide des nouvelles fonctionnalités de l'API.
Question
À l'aide de la dernière Base de Données fonctionnalités de l'API, comment dois-je faire une simple demande de récupération? La question sous-jacente est de savoir comment dois-je apporter mon NSmanagedObjectCotnext dans l'étendue.
Je dois souligner que je suis capable de réussir à faire une demande à l'aide de la syntaxe traditionnelle.
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai compris deux façons de le faire. Le première approche, qui est similaire à mon exemple de code est tout simplement:
La deuxième approche, qui a été montré dans la WWDC 2016 utilise une fonction nommée "exécuter" sur notre demande de récupération de l'objet.
Si vous affichez les détails sur NSFetchRequest vous verrez un commentaire qui indique clairement que l'opération doit être effectuée dans un bloc.
Il m'est apparu que c'était la manière d'effectuer l'extraction:
Pour ceux qui roulent leurs propres
Si vous roulez votre propre code, vous pourriez trouver que votre code ne compile pas. Inclus dans le code généré automatiquement est une nouvelle méthode appelée fetchRequest que le compilateur utilise pour passer le type long. Voici à quoi ressemble le code.
as!
de passer vous êtes en train de faire n'est plus nécessaire-- les résultats de l'extraction doit déjà avoir un type de[MyEntity]
.[Event]?
, où je peux regarder des attributs par nom.+ (NSFetchRequest<MLCloudFileModel *> *)fetchRequest;
et le résultat renvoyé de[super fetchRequest]
. Qui a été traduit correctement Swift et j'ai pu faire appel fetchRequest() et recevoir la bonne entité.Pour jeOS 10 (Swift 3) de la manière Suivante qui m'a aidé: