Joh*_*n S 23 iphone xcode core-data objective-c nsmanagedobject
我在我的应用程序中使用核心数据,当涉及从核心数据存储中删除某些行或条目时,我感到很困惑.我将一些产品插入存储器中,如下所示:
NSManagedObject *Product = [NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:context];
[Product setValue:[NSNumber numberWithFloat:id] forKey:@"pid"];
[Product setValue:[NSNumber numberWithFloat:quantity] forKey:@"pquantity"];
Run Code Online (Sandbox Code Playgroud)
这适用于插入.但是,稍后在应用程序中,我想删除条目,例如,pid是53.如何才能删除此行/条目?等效的SQL将是这样的:
DELETE from Product WHERE pid = '53'
Run Code Online (Sandbox Code Playgroud)
我非常感谢一些示例代码,因为我似乎无法想出这个代码.
谢谢你的帮助.
Tec*_*Zen 42
正如@Nektarios所说,您正在处理对象,因此您希望找到具有特定属性值的对象.你有一个获取请求和一个谓词.
NSNumber *soughtPid=[NSNumber numberWithInt:53];
NSEntityDescription *productEntity=[NSEntityDescription entityForName:@"Product" inManagedObjectContext:context];
NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
[fetch setEntity:productEntity];
NSPredicate *p=[NSPredicate predicateWithFormat:@"pid == %@", soughtPid];
[fetch setPredicate:p];
//... add sorts if you want them
NSError *fetchError;
NSArray *fetchedProducts=[self.moc executeFetchRequest:fetch error:&fetchError];
// handle error
Run Code Online (Sandbox Code Playgroud)
该fetchedProducts数组将包含属性等于的实体Product的所有对象.请注意,谓词在逻辑上与SQL中的子句完成相同的功能.pidsoughtPidwhere
获得对象后,您只需告诉上下文删除它们:
for (NSManagedObject *product in fetchedProducts) {
[context deleteObject:product];
}
Run Code Online (Sandbox Code Playgroud)
下次保存上下文时,将从持久性存储文件中删除对象的数据.
Bil*_*een 13
与Sqlite的"从tableName WHERE条件中删除"一样,您没有MULTIPLE从CoreData中删除对象的单一步骤.
在CoreData中,首先必须使用和获取必须删除的对象NSFetchRequestNSPredicate
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"EntityName"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"propertyName == %@", value];
[request setPredicate:predicate];
NSError *error = nil;
NSManagedObjectContext *managedObjectContext;//Get your ManagedObjectContext;
NSArray *result = [managedObjectContext executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)
然后,你应该遍历每一个NSManagedObject并deleteObject:从你的呼叫NSManagedObjectContext.
if (!error && result.count > 0) {
for(NSManagedObject *managedObject in result){
[managedObjectContext deleteObject:managedObject];
}
//Save context to write to store
[managedObjectContext save:nil];
}
Run Code Online (Sandbox Code Playgroud)
请记住将Core Data视为图形而不是DB,因此行的概念不适用.相反,您想要从图表中删除特定对象.
你insertNewObjectForEntityForName:inManagedObjectContext:以前插入它.使用deleteObject:来删除它,如:
[aContext deleteObject:aManagedObject];
在你的情况下,
[context deleteObject:Product];
祝好运
请参阅Apple的解释
注意:根据您的方案删除时,可能会产生不同的含义.例如,它可以删除Core Data对象图的子路径下的所有内容.确保在设计关于应该如何工作的模式时要认真思考.如果你设置正确,这对你来说是一个巨大的优势.
小智 6
使用此方法:
+ (void)Deletebeer:(NSString*)m_Beerid
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *productEntity=[NSEntityDescription entityForName:@"Beers" inManagedObjectContext:context];
NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
[fetch setEntity:productEntity];
NSPredicate *p=[NSPredicate predicateWithFormat:@"m_Beerid == %@", m_Beerid];
[fetch setPredicate:p];
//... add sorts if you want them
NSError *fetchError;
NSError *error;
NSArray *fetchedProducts=[context executeFetchRequest:fetch error:&fetchError];
for (NSManagedObject *product in fetchedProducts) {
[context deleteObject:product];
}
[context save:&error];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31187 次 |
| 最近记录: |