#! /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 件のコメント:
コメントを投稿