2015-10-27 37 views
0

我想设置如果rss feedurl在coredata中可用,那么只有解析完成否则它将存储在coredata中。 我已经尝试实现方法这个问题
IOS Coredata check if attribute is exist or notios coredata如何检查rssfeed url是否存在于coredata中

这里的基准是我的尝试:

- (void)feedParserDidFinish:(MWFeedParser *)parser { 

    [HUD hide:YES]; 

    //**Coredata inserting value**// 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"maindata"]; 
    NSFetchRequest *fetchrequestforside=[NSFetchRequest fetchRequestWithEntityName:@"anotherdata"]; 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"urloffeed = %@", self.linkfeed]; 
    fetchrequestforside.predicate=[NSPredicate predicateWithFormat:@"furloffeed = %@", self.linkfeed]; 
    NSManagedObjectContext *context = [self managedObjectContext]; 





    if ([[context executeFetchRequest:fetchRequest error:NULL] count] == 0) { 
     // Create a new managed object 
     NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"maindata" inManagedObjectContext:context]; 
     [newDevice setValue:self.Name forKey:@"urlname"]; 
     [newDevice setValue:self.WebsiteName forKey:@"websitename"]; 
     [newDevice setValue:self.Feedlink forKey:@"urloffeed"]; 


     NSError *error = nil; 
     // Save the object to persistent store 
     if (![context save:&error]) { 
      NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
     } 

    } 

    if ([[context executeFetchRequest:fetchrequestforside error:NULL] count] == 0) { 
     // Create a new managed object 
       NSManagedObject *newDevice1 = [NSEntityDescription insertNewObjectForEntityForName:@"anotherdata" inManagedObjectContext:context]; 

     if (self.urlname) { 
      [newDevice1 setValue:self.Name forKey:@"urlname"]; 

     } 
     if (self.WebsiteName) { 
      [newDevice1 setValue:self.WebsiteName forKey:@"websitename"]; 

     } 
     if (self.urloffeed) { 
      [newDevice1 setValue:self.Feedlink forKey:@"urloffeed"]; 

     } 

     NSError *error = nil; 
     // Save the object to persistent store 
     if (![context save:&error]) { 
      NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
     } 

    } 

注: - 我要救网址两个实体。

+0

使用搜索查询在相应栏中的URL值。 – rptwsthi

+0

唯一和最好的方法:你应该做一个谓词,并在插入 – Mohamad

+0

之前检查你的数据库上的这个网址,你可以请详细解释我是新来的ios所以,我不知道如何设置检查网址在coredata条件? –

回答

0

如果您想要根据特定属性的值不止一次插入实体,那么您可能需要编写一个辅助方法。

像这样的东西可以做你想要的。如果插入了对象,则返回YES。在这种情况下,objectPtr将包含新插入的对象。如果对象已经存在,或者如果尝试执行插入时出错,它将返回NOobjectPtr将包含现有对象或errorPtr将包含错误。

- (BOOL)insertEntity:(NSString*)entity 
      withValue:(id)value 
       forKey:(NSString*)key 
       inMOC:(NSManagedObjectContext*)moc 
       object:(NSManagedObject**)objectPtr 
       error:(NSError**)errorPtr { 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entity]; 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"%K = %@", key, value]; 
    fetchRequest.fetchLimit = 1; 
    BOOL inserted = NO; 
    NSArray *result = [moc executeFetchRequest:fetchRequest error:errorPtr]; 
    if (result) { 
     NSManagedObject *object = [result firstObject]; 
     if (object == nil) { 
      object = [NSEntityDescription insertNewObjectForEntityForName:entity 
                inManagedObjectContext:moc]; 
      [object setValue:value forKey:key]; 
      inserted = YES; 
     } 
     if (objectPtr) { 
      *objectPtr = object; 
     } 
    } else if (objectPtr) { 
     *objectPtr = nil; 
    } 
    return inserted; 
} 

然后,你可以使用它是这样的...

NSManagedObject *object; 
NSError *error; 
if ([self insertEntity:@"maindata" 
      withValue:self.Feedlink 
       forKey:@"urloffeed" 
       inMOC:context 
       object:&object 
       error:&error]) { 
    [object setValue:self.Name forKey:@"urlname"]; 
    [object setValue:self.WebsiteName forKey:@"websitename"]; 
}