やはりお前らのCoreData
の使い方も間違っている
potatotips #6
株式会社キュリオシティソフトウェア
@yimajo
自己紹介
• 株)キュリオシティソフトウェア代表取締役(今城善矩)
• まったりiOSアプリの受託開発もしているので仕事の話が
あれば相談に乗れる体制ですよ
• 現状サーバー/Androidアプリ込みなら発注するというお話
はお断りしてしまっていたのですが、もし得意な方でやろ
うぜ!という方がいれば教えてください。
本題
全力でdisるよ!
CoreDataの使い方について
まず言いたいのが
AppDelegateが
NSManagedObjectContextや
NSManagedObjectModelを
生成したりすべき
ではない
ということ。
AppDelegateは
iOSなどから変化に応じて直
接処理を受け付ける
のが役目。
これを忘れるから
お前らはすぐ
AppDelegateを肥満にする
( )゚Д゚( ;)
得意なことだけをやらせろ。
次に言いたいのは、
データの取得の際は
常に
NSFetchedResultsController
を使う
必要はない
これは
Xcodeが生成する
コードテンプレートに
お前ら釣られすぎ
m9(^Д^)
NSFetchedResultsController
は
UITableViewがある場合など
indexPath(sectionとrow)に
対応している場合に便利
例えば一件だけデータがほし
いだけなら
NSFetchRequestで充分。
使いわけ重要。
さいごに
NSManagedObject
サブクラスをモデルデータか
ら自動生成しているのに
プロパティを使わずに
NSMangedObjectクラスの
setValue:forKey:を使って
わざわざ文字列のKeyを使っ
て
データを操作してしまってる
//Eventというクラスを文字列指定で編集しようとする
NSEntityDescription *entity
= [NSEntityDescription entityForName:@"Event"
inManagedObjectContext:managedObjectContext];
!
!
//NSManagedObjectをそのまま使っているので
//setValue:forKeyによりキー値コーディングすることになる
[entity setValue:@“potatotips” forKey:@“name"];
NSManagedObjectのサブク
ラスを自動生成していれば
クラスのプロパティを利用で
きる
//クラス名を文字列で取得して名前で呼び出せるように準備
//EXMSubClassは自動生成したNSManagedObjectのサブクラス
NSString *className = NSStringFromClass([EXMSubClass class]);
!
EXMSubClass *entity
= [NSEntityDescription entityForName:className
inManagedObjectContext:managedObjectContext];
!
!
//サブクラスにnameの属性があればプロパティでアクセスできる
entity.name = @“potatotips”;
やはり
これも
(サブクラスを生成していない)
Xcodeのコードテンプレートに
お前らは
釣られすぎている
(☝  ՞ਊ  ՞)☝
おわり
参考
やはりお前らのiOS7対応は間違っている
http://www.slideshare.net/YoshinoriImajo/ios7-30039408
!
やはりお前らのMVCは間違っている
http://www.slideshare.net/MugeSo/mvc-14469802

やはりお前らのCore Dataの使い方も間違っている