5

Я пытаюсь использовать CoreData, но когда я добавляю его в моем проекте я получаю только два новых метода:Как использовать CoreData в Xcode 8?

- (NSPersistentContainer *)persistentContainer 

и

- (void)saveContext 

Теперь я не могу получить старые методы работы с CoreData , и я не могу найти учебники с этими новыми методами и Objective-C. Как сохранить и получить данные с CoreData с помощью persistentContainer в Xcode 8 с Objective-c?

+0

Нихилу Manapure. Спасибо, но я пока не понимаю Swift. Но это будет здорово, если вы покажете мне, как это можно сделать в Swift, и я постараюсь сделать это в Objective-C – scorpio

+0

@Nikhil Manapure Спасибо большое! Я буду ждать решения с Objective C – scorpio

+0

Пожалуйста, обратитесь к коду со следующего URL-адреса. https://github.com/dilipkosuri/CoreDataIOS –

ответ

15

Вы можете Получить контекст, как -

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

или в Objective-C

NSManagedObjectContext *context = ((AppDelegate*)[[UIApplication sharedApplication] delegate]).persistentContainer.viewContext; 

И выборки данных как -

var resultArray = try self.context.fetch(EntityName.fetchRequest()) 

или как в Objective -C

NSFetchRequest<EntityName *> *fetchRequest = [EntityName fetchRequest]; 
NSError *error ; 
NSArray *resultArray= [context executeFetchRequest:fetchRequest error:&error]; 

И выборки данных с сортировкой -

var resultArray = [EntityName]() 
do { 
     let request : NSFetchRequest<EntityName> = EntityName.fetchRequest() 
     let sortDescriptor = NSSortDescriptor(key: "somekey", ascending: true) 
     let sortDescriptors = [sortDescriptor] 
     request.sortDescriptors = sortDescriptors 
     resultArray = try self.context.fetch(request) 
} catch { 
     print("Error") 
} 

или как в Objective-C

NSFetchRequest<EntityName *> *fetchRequest = [EntityName fetchRequest]; 
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"someKey" ascending:YES]; 
fetchRequest.sortDescriptors = @[sortDescriptor]; 
NSError *error ; 
NSArray *resultArray= [context executeFetchRequest:fetchRequest error:&error]; 

И добавить данные как -

let entityNameObj = EntityName(context: context) 
entityNameObj.title = "title" 

или как в Objective-C

NSManagedObject *entityNameObj = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context]; 
[entityNameObj setValue:@"someValue" forKey:@"someKey"]; 

И сохранить контекст как -

do { 
    try self.context.save() 
} catch _ as NSError { 
    print("Error") 
} 

или в Objective-C

[((AppDelegate*)[[UIApplication sharedApplication] delegate]) saveContext]; 
0

Я нашел решение, используя Objective C. Он работает, но я не уверен, что это правильное решение.

- (void)dbManager { 
NSManagedObjectContext *context = self.persistentContainer.viewContext; 
NSError *error = nil; 
if ([context hasChanges] && ![context save:&error]) { 
    // Replace this implementation with code to handle the error appropriately. 
    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    NSLog(@"Unresolved error %@, %@", error, error.userInfo); 
    abort(); 
} 

    NSManagedObject *customAnimal = [NSEntityDescription insertNewObjectForEntityForName:@"Animals" inManagedObjectContext:context]; 
    [customAnimal setValue:@"Lion" forKey:@"type"]; 
    [customAnimal setValue:@"Rabit" forKey:@"name"]; 
    [customAnimal setValue:@"Blue" forKey:@"color"]; 
    [customAnimal setValue:@12 forKey:@"age"]; 



    NSLog(@"Get data from DB"); 

    NSMutableArray* animalsArray; 


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Animals"]; 


    animalsArray = [[context executeFetchRequest:fetchRequest error:nil] mutableCopy]; 



    NSLog(@"array is %@", animalsArray); // array is (
"<Animals: 0x6000000aee80> (entity: Animals; id: 0x60000022e120 <x-coredata:///Animals/tAAC7332D-6BEF-441C-9041-0ECB57469FA62> ; data: {\n age = 12;\n color = Blue;\n name = Rabit;\n type = Lion;\n})"  

}

3
-(void)profileDatabase 

{ NSManagedObjectContext * Контекст = [ADM.persistentContainer ViewContext];

NSManagedObject *profile=[NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:context]; 

[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"firstName"] forKey:@"firstName"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"surName"] forKey:@"surName"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"batchID"] forKey:@"batchID"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"profileImagePath"] forKey:@"profileImagePath"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"registeredEmail"] forKey:@"registeredEmail"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"role"] forKey:@"role"]; 
[profile setValue:[self.serverResponseOfProfileDict objectForKey:@"studentID"] forKey:@"studentID"]; 

NSLog(@"userObj:%@",profile); 
NSError* error; 
[context save:&error]; 


NSFetchRequest *fetchRequest=[[NSFetchRequest alloc]initWithEntityName:@"Profile"]; 

fetchRequest.returnsObjectsAsFaults=NO; 
NSArray* results=[context executeFetchRequest:fetchRequest error:&error]; 
NSLog(@"Result:%@",results); 

    NSManagedObject *result=[results objectAtIndex:0]; 

    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"firstName"] forKey:@"firstName"]; 
    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"surName"] forKey:@"surName"]; 
    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"batchID"] forKey:@"batchID"]; 
    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"profileImagePath"] forKey:@"profileImagePath"]; 
    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"registeredEmail"] forKey:@"registeredEmail"]; 

    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"role"] forKey:@"role"]; 

    [ADM.databaseResponseOfProfileDict setObject:[result valueForKey:@"studentID"] forKey:@"studentID"]; 
    NSLog(@"dic:%@",ADM.databaseResponseOfProfileDict); 

}

Смежные вопросы