5

私はCoreData使用をしようとしていますが、私は私のプロジェクトに追加したときに、私は唯一の2つの新しいメソッドを取得:Xcode 8でCoreDataを使用するには?

- (NSPersistentContainer *)persistentContainer 

- (void)saveContext 

は、今私は古い方法がCoreDataで動作させることはできません私はこれらの新しいメソッドとObjective-Cでチュートリアルを見つけることができません。 Objective-cでCoreDataからXcode 8のpersistentContainerを使用してデータを保存して取得するにはどうすればよいですか?

+0

ニキルManapure。ありがとう、しかし私はまだスイフトをよく理解していない。しかし、スウィフトでそれをどうやって行うことができるかを私に見せてくれれば嬉しいです。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()) 

のか、目的のように-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") 
} 

または私は客観C.を使用して解決策を見つけたのObjective-C

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

のようにそれは実行されますが、私はそれが正しい解決策であるとは確信していません。

- (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); 

}

関連する問題