CoreData が automatic になったことは既報の通りです。実際使用するにあたり、どういう違いが出てくるのか、実際プログラムして試してみました。
結論から言うと、automatic の方が便利です。理由は、開発の段では database の schema は変動的なので、フィールドの追加、フィールド名の変更などが頻繁に発生するもので、その度にファイルを作り直す必要がないので(コンパイル時に自動的に作ってくれるので)そこが便利。
あと、従来の方法で、フィールドの変更などが起こると、アプリ起動時にアプリが落ちてしまうことが大半で、お?何のエラー?意味わかんね?と言うことがしばしばでしたが、automatic なら、落ちることも少なくなり精神衛生上好ましいと思います。それではフィールド名の変更やフィールドの追加があったとするとどうなるのかと言うと、変更前のレコードはそのまま取り残され、次にデータを保存したタイミングでは新しいスキーマに基づいたレコードが保存されることになります。落ちなくなったものの、すでに保存してしまったデータを活かすなら従来通り migration は必要なので、そこは、注意が必要でしょうか。
それでは、新しい CoreData はどうやって使うかについて言及しましょう。まずヘッダーファイルで以下の指定をします。
#import <CoreData/CoreData.h>
#import "your_entity_name+CoreDataProperties.h"
データの追加は次のような形です。
AppDelegate* appdelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext* context = appdelegate.persistentContainer.viewContext;
これで、context ができたので、データを保存するなら、こんな感じです。
NSManagedObject* entityNameObj = [NSEntityDescriptioninsertNewObjectForEntityForName:@"your_entity_name"
inManagedObjectContext:context];
[entityNameObj setValue:mesg forKey:@"your_fieldname"];
[((AppDelegate*)[[UIApplication sharedApplication] delegate]) saveContext];
と言うわけで、
appdelegate.persistentContainer.viewContext
って何ですか?と言うのはありますが、これは覚えるしかないのでしょうね。