Obtenir une erreur dans un exemple de projet de données de base
J'ai appris sur la base des données de : http://www.appcoda.com/introduction-to-core-data/mais quand j'ai développé un projet exemple moi-même, beaucoup d'erreurs viennent dans deux fichiers.
Toute aide serait appréciée comme je suis un newbie dans le développement iPhone
//
// PupilViewController.m
// Pupils
//
// Created by Lukasz Mozdzen on 21.04.2013.
// Copyright (c) 2013 Lukasz Mozdzen. All rights reserved.
//
#import "PupilViewController.h"
@interface PupilViewController ()
@property (strong) NSMutableArray *pupils;
@end
@implementation PupilViewController
- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Pupil"];
self.pupils = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//Return the number of rows in the section.
return self.pupils.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//Configure the cell...
NSManagedObject *pupil = [self.pupils objectAtIndex:indexPath.row];
[cell.textLabel setText:[NSString stringWithFormat:@"%@ %@", [pupil valueForKey:@"name"], [pupil valueForKey:@"surname"]]];
[cell.detailTextLabel setText:[pupil valueForKey:@"telephone"]];
return cell;
}
@end
Journal Des Erreurs :
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:36:5: Use of undeclared identifier 'NSFetchRequest'
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:36:21: Use of undeclared identifier 'fetchRequest'
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:36:38: Use of undeclared identifier 'NSFetchRequest'
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:37:62: Use of undeclared identifier 'fetchRequest'
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:62:5: Unknown type name 'NSManagedObject'; did you mean 'NSManagedObjectModel'?
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:63:67: Receiver type 'NSManagedObjectModel' for instance message is a forward declaration
/Users/Lukasz/Desktop/Pupils/Pupils/PupilViewController.m:64:36: Receiver type 'NSManagedObjectModel' for instance message is a forward declaration
Aussi dans d'autres fichier:
//
// PupilDetailViewController.m
// Pupils
//
// Created by Lukasz Mozdzen on 21.04.2013.
// Copyright (c) 2013 Lukasz Mozdzen. All rights reserved.
//
#import "PupilDetailViewController.h"
@interface PupilDetailViewController ()
@end
@implementation PupilDetailViewController
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (IBAction)cancel:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
//Create a new managed object
NSManagedObject *newPupil = [NSEntityDescription insertNewObjectForEntityForName:@"Pupil" inManagedObjectContext:context];
[newPupil setValue:self.nameTextField.text forKey:@"name"];
[newPupil setValue:self.surnameTextField.text forKey:@"surname"];
[newPupil setValue:self.telephoneTextField.text forKey:@"telephone"];
NSError *error = nil;
//Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//Dispose of any resources that can be recreated.
}
@end
Journal Des Erreurs :
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:38:5: Unknown type name 'NSManagedObject'; did you mean 'NSManagedObjectModel'?
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:38:34: Use of undeclared identifier 'NSEntityDescription'; did you mean 'kSecAttrDescription'?
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:38:34: Bad receiver type 'CFTypeRef' (aka 'const void *')
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:39:6: Receiver type 'NSManagedObjectModel' for instance message is a forward declaration
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:40:6: Receiver type 'NSManagedObjectModel' for instance message is a forward declaration
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:41:6: Receiver type 'NSManagedObjectModel' for instance message is a forward declaration
/Users/Lukasz/Desktop/Pupils/PupilDetailViewController.m:45:11: Receiver type 'NSManagedObjectContext' for instance message is a forward declaration
Quelqu'un peut aider?
source d'informationauteur Lukasz Mozdzen
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le Framework coredata pour bundle avant d'utiliser le même.
Comme vous l'avez dit, vous êtes un débutant dans le développement iPhone, je vous suggère de vous référer à apple docs sur coredata avant de la mettre en œuvre.
En plus de l'ajout de Base de Données-cadre dans les paramètres du projet, vous avez pour
#import <CoreData/CoreData.h>
dans votre code source. Vous pouvez le faire juste une fois, pour l'ensemble d'un projet en plaçant l'#import
.pch fichier pour votre projet, on trouve généralement dans "Fichiers de prise en charge" groupe de l'arborescence de votre projet.Génial de voir ça ici, même que j'ai déjà pensé moi-même.
Le problème est qu'il y a passé depuis lors, et depuis iOS 10, le
ManagedObjectContext
a été déplacé à laPersistentContainer
à l'intérieur de l'attributviewContext
. C'est aussi pourquoi vous avez besoin de changer l'extrait de AppCoda un peu de sorte qu'il va appeler le contexte#dans 'AppDelegate" et dans la " vue des contrôleurs résolu des problèmes similaires pour moi. J'ai ajouté CoreData à un Projet existant et donc, cet automatiques importation de CoreData cadre a été oublié.
Testé avec Swift 3