簡體   English   中英

ios-如何檢查coredata中是否存在rssfeed url

[英]ios coredata How to check that rssfeed url is exist in coredata or not

我想進行設置,如果rss feedurl在coredata中可用,則僅進行解析,否則它將存儲在coredata中。 我已嘗試參考此問題實施方法
iOS 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]);
        }

    }

注意:-我必須將網址保存在兩個實體中。

如果要基於特定屬性的值不止一次地插入實體,則可能需要編寫一個輔助方法。

這樣的事情可能會做您想要的。 如果插入了對象,則返回YES 在這種情況下, objectPtr將包含新插入的對象。 如果對象已經存在,或者嘗試執行插入操作時出錯,則返回NO objectPtr將包含現有對象,或者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"];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM