新しいオブジェクトを挿入するときは、次のコードを使用します。
NSManagedObjectContext *context = [appDelegate managedObjectContext];
Favorits *favorits = [NSEntityDescription insertNewObjectForEntityForName:@"Favorits" inManagedObjectContext:context];
favorits.title = @"Some title";
NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops");
}
コアデータの既存のオブジェクトを更新するにはどうすればよいですか?
更新は、新しいものを作成するのと同じくらい簡単です。
特定のオブジェクトを更新するには、NSFetchRequest
を設定する必要があります。このクラスは、SQL言語のSELECTステートメントに相当します。
ここに簡単な例:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// error handling code
配列results
には、sqliteファイル内に含まれるすべての管理対象オブジェクトが含まれます。特定のオブジェクト(または複数のオブジェクト)を取得する場合は、そのリクエストで述語を使用する必要があります。例えば:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"];
[request setPredicate:predicate];
この場合、results
には、タイトルがSome Title
と等しいオブジェクトが含まれます。述部を設定することは、SQLステートメントにWHERE節を置くことと同じです。
詳細については、Core DataプログラミングガイドとNSFecthRequest
クラスリファレンスを読むことをお勧めします。
それが役に立てば幸い。
[〜#〜] edit [〜#〜](更新に使用できるスニペット)
// maybe some check before, to be sure results is not empty
Favorits* favoritsGrabbed = [results objectAtIndex:0];
favoritsGrabbed.title = @"My Title";
// save here the context
またはNSManagedObject
サブクラスを使用していない場合。
// maybe some check before, to be sure results is not empty
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"My title" forKey:@"title"];
// save here the context
どちらの場合も、コンテキストでsave
を実行すると、データが更新されます。
fetch コンテキストからオブジェクトを選択し、必要なプロパティを変更してから、例のとおりにコンテキストを保存する必要があります。
これがあなたのお役に立てば幸いです。それが私のために働くように。
NSMutableArray *results = [[NSMutableArray alloc]init];
int flag=0;
NSPredicate *pred;
if (self.txtCourseNo.text.length > 0) {
pred = [NSPredicate predicateWithFormat:@"courseno CONTAINS[cd] %@", self.txtCourseNo.text];
flag=1;
} else {
flag=0;
NSLog(@"Enter Corect Course number");
}
if (flag == 1) {
NSLog(@"predicate: %@",pred);
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Course"];
[fetchRequest setPredicate:pred];
results = [[self.context executeFetchRequest:fetchRequest error:nil] mutableCopy];
if (results.count > 0) {
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:self.txtCourseName.text forKey:@"coursename"];
[self.context save:nil];
[self showData];
} else {
NSLog(@"Enter Corect Course number");
}
}
Objective-Cで助けてくれた答えを見ました。 Swift users-
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate
else
{
return
}
let updateCont = appDelegate?.persistentContainer.viewContext
let pred = NSPredicate(format: "your_Attribute_Name = %@", argumentArray : [your_Arguments])
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "your_Entity_Name")
request.predicate = pred
do {
let resul = try updateCont?.fetch(request) as? [NSManagedObject]
let m = resul?.first
m?.setValue(txtName.text, forKey: "your_Attribute_Name_Whose_Value_Should_Update")
try? updateCont?.save()
}catch let err as NSError
{
print(err)
}
あなたがSwiftプログラマーなら、これはあなたを助けることができます:
nSManagedObjectを削除する場合
私の場合、IDはエンティティSTUDENTの一意の属性です
/** for deleting items */
func Delete(identifier: String) {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "STUDENT")
let predicate = NSPredicate(format: "ID = '\(identifier)'")
fetchRequest.predicate = predicate
do
{
let object = try context.fetch(fetchRequest)
if object.count == 1
{
let objectDelete = object.first as! NSManagedObject
context.delete(objectDelete)
}
}
catch
{
print(error)
}
}
nSManagedObjectを更新する場合:
/** for updating items */
func Update(identifier: String,name:String) {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "STUDENT")
let predicate = NSPredicate(format: "ID = '\(identifier)'")
fetchRequest.predicate = predicate
do
{
let object = try context.fetch(fetchRequest)
if object.count == 1
{
let objectUpdate = object.first as! NSManagedObject
objectUpdate.setValue(name, forKey: "name")
do{
try context.save()
}
catch
{
print(error)
}
}
}
catch
{
print(error)
}
}