iOS sqlite存储空值而不调用setValue
我试图在sqlite中存储产品。当我为数据库实体设置值时,我存储正确的值 但问题是,我检查了该产品是否已经在数据库中,然后它不应该再添加相同的产品。但下次它在数据库中存储空值时 虽然我没有调用[addToFav setValue:@“我的值”] 只需将其签入循环即可。当我的循环运行时,它不会进入第一个条件,在该条件下,我将计数器设置为if(count==0) 我不知道从哪里开始存储空值。虽然我不叫它任何其他地方。那么它如何在数据库中存储空值呢iOS sqlite存储空值而不调用setValue,ios,objective-c,Ios,Objective C,我试图在sqlite中存储产品。当我为数据库实体设置值时,我存储正确的值 但问题是,我检查了该产品是否已经在数据库中,然后它不应该再添加相同的产品。但下次它在数据库中存储空值时 虽然我没有调用[addToFav setValue:@“我的值”] 只需将其签入循环即可。当我的循环运行时,它不会进入第一个条件,在该条件下,我将计数器设置为if(count==0) 我不知道从哪里开始存储空值。虽然我不叫它任何其他地方。那么它如何在数据库中存储空值呢 - (IBAction)buttonAddToFav
- (IBAction)buttonAddToFavourite:(id)sender {
int count = 0;
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error=nil;
NSManagedObject *addToFav = [NSEntityDescription insertNewObjectForEntityForName:@"Favourite" inManagedObjectContext:context];
NSString *dish = [results objectForKey:@"id"];
fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Favourite" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
NSString *id1 = [info valueForKey:@"dishid"];
if ([id1 isEqualToString:dish]) {
count = count +1;
}
}
if (count == 0) {
[addToFav setValue:[results objectForKey:@"id"] forKey:@"dishid"];
[CSNotificationView showInViewController:self
tintColor:[UIColor greenColor]
image:[UIImage imageNamed:@"sucess"]
message:@"Saved As Favourite."
duration:2.0f];
[self.permanentNotification setShowingActivity:YES];
}
else if (count > 0){
[CSNotificationView showInViewController:self
tintColor:[UIColor redColor]
image:[UIImage imageNamed:@"warning"]
message:@"Dish Already Added."
duration:2.0f];
[self.permanentNotification setShowingActivity:YES];
}
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}如果您从未输入
count==0
分支,则您有一个或多个喜爱的实体,其dishid
属性与局部作用域dish
变量相同。dish
nil吗?如果是这样,那么count
将始终大于0,因为您尚未初始化要测试的核心数据实体属性。如果我对这行进行注释/[addToFav setValue:[results objectForKey:@“id”]forKey:@“dishid”];那么,dishid
的默认值应该是什么呢?在后台sqlite存储中,除非设置,否则列为NULL。在核心数据中,您可以在模型编辑器中设置不同的默认值。我不想在数据库id中添加任何值,因为数据库中存在相同的产品。这就是为什么如果计数大于这行代码的0/[addToFav setValue:[results objectForKey:@“id”]forKey:@“dishid”];显然不会运行。若这段代码并没有运行,那个么为什么要在数据库中添加值呢。我很惊讶你在两种情况下都添加了相同的通知。您能否验证此部件在何处显示通知警报。在第一种情况下应该进行磨合,在另一种情况下会发生什么
- (IBAction)buttonAddToFavourite:(id)sender {
NSError *error = nil;
NSString *dishId = results[@"id"];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Favourite"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"dishid == %@", dishId]];
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects.count) {
[CSNotificationView showInViewController:self
tintColor:[UIColor redColor]
image:[UIImage imageNamed:@"warning"]
message:@"Dish Already Added."
duration:2.0f];
[self.permanentNotification setShowingActivity:YES];
}
else {
Favourite *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Favourite" inManagedObjectContext:self.managedObjectContext];
obj.dishid = dishId;
[CSNotificationView showInViewController:self
tintColor:[UIColor greenColor]
image:[UIImage imageNamed:@"sucess"]
message:@"Saved As Favourite."
duration:2.0f];
[self.permanentNotification setShowingActivity:YES];
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
}