2016-12-08 28 views
5

Staram użytkowania CoreData, ale kiedy dodać go do mojego projektu mam tylko dwie nowe metody:Jak korzystać z CoreData w Xcode 8?

- (NSPersistentContainer *)persistentContainer 

i

- (void)saveContext 

Teraz nie mogę się stare metody pracy z CoreData , i nie mogę znaleźć żadnych tutoriali z tymi nowymi metodami i Objective-C. Jak mogę zapisać i pobrać dane z CoreData używając persistentContainer w Xcode 8 z Objective-c?

+0

Nikhil Manapure. Dzięki, ale nie rozumiem jeszcze dobrze Swift. Ale będzie świetnie, jeśli pokażesz mi, jak to zrobić w Swift i spróbuję to zrobić w Objective-C – scorpio

+0

@Nikhil Manapure Wielkie dzięki! Czekam na rozwiązanie z Objective C – scorpio

+0

Proszę zapoznać się z kodem pod następującym adresem URL. https://github.com/dilipkosuri/CoreDataIOS –

Odpowiedz

15

Można Get kontekst as -

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

lub w Objective-C

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

I pobrać dane Like -

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

lub jak w Celu -C

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

I pobrać dane z sortowaniem -

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") 
} 

lub AS w celu 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]; 

I dodawać dane jak -

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

lub w celu C

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

I zachowanie kontekstu jak -

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

lub w celu C

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

I znaleźć rozwiązanie używając Cel C. Działa, ale nie jestem pewien, czy jest to poprawne rozwiązanie.

- (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 * context = [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); 

}

Powiązane problemy