iOS sqlite存储空值而不调用setValue

iOS sqlite存储空值而不调用setValue,ios,objective-c,Ios,Objective C,我试图在sqlite中存储产品。当我为数据库实体设置值时,我存储正确的值 但问题是,我检查了该产品是否已经在数据库中,然后它不应该再添加相同的产品。但下次它在数据库中存储空值时 虽然我没有调用[addToFav setValue:@“我的值”] 只需将其签入循环即可。当我的循环运行时,它不会进入第一个条件,在该条件下,我将计数器设置为if(count==0) 我不知道从哪里开始存储空值。虽然我不叫它任何其他地方。那么它如何在数据库中存储空值呢 - (IBAction)buttonAddToFav

我试图在sqlite中存储产品。当我为数据库实体设置值时,我存储正确的值

但问题是,我检查了该产品是否已经在数据库中,然后它不应该再添加相同的产品。但下次它在数据库中存储空值时

虽然我没有调用[addToFav setValue:@“我的值”]

只需将其签入循环即可。当我的循环运行时,它不会进入第一个条件,在该条件下,我将计数器设置为if(count==0)

我不知道从哪里开始存储空值。虽然我不叫它任何其他地方。那么它如何在数据库中存储空值呢

- (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]);
    }
  }
}