#! /usr/local/bin/macruby # coding:utf-8 # framework 'Foundation' framework 'CoreData' DB_NAME = "Question" ENTITY_NAME = "Question" class DB def managedObjectModel if (@managedObjectModel != nil) return @managedObjectModel end modelURL = NSURL.URLWithString Dir.pwd+"/#{DB_NAME}.momd" @managedObjectModel = NSManagedObjectModel.alloc.initWithContentsOfURL(modelURL) return @managedObjectModel end def persistentStoreCoordinator if (@persistentStoreCoordinator != nil) return @persistentStoreCoordinator end storeURL = NSURL.fileURLWithPath Dir.pwd+"/#{DB_NAME}.sqlite" error = Pointer.new(:object) @persistentStoreCoordinator = NSPersistentStoreCoordinator.alloc.initWithManagedObjectModel(self.managedObjectModel) if (!@persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration:nil, URL:storeURL, options:nil, error:error)) puts "Unresolved error #{error}, #{error.userInfo}" abort() end return @persistentStoreCoordinator end def managedObjectContext if (@managedObjectContext != nil) return @managedObjectContext end coordinator = self.persistentStoreCoordinator if (coordinator != nil) @managedObjectContext = NSManagedObjectContext.alloc.init @managedObjectContext.setPersistentStoreCoordinator(coordinator) end return @managedObjectContext end def saveContext error = Pointer.new(:object) managedObjectContext = self.managedObjectContext if (managedObjectContext != nil) if (managedObjectContext.hasChanges || !managedObjectContext.save(error)) puts "Unresolved error #{error}, #{error.userInfo}" abort() end end end end `/Developer/usr/bin/momc #{DB_NAME}.xcdatamodeld #{DB_NAME}.momd` if File.exist? "#{DB_NAME}.sqlite" File.delete "#{DB_NAME}.sqlite" end db = DB.new p model = db.managedObjectModel var = {"YEAR" => 2010} request = model.fetchRequestFromTemplateWithName("QuestionsWithYear", substitutionVariables:var) p request.predicate.predicateFormat db.saveContext
2011年8月17日水曜日
MacRuby から CoreData
アプリに入れるデータは MacRuby で作っていたりします。Objective-C でも良いんだけど、コンパイルとか面倒だし、テキスト処理は Ruby だと楽チンだし♪
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿