在没有tableView的情况下使用带有fetch的谓词

时间:2014-04-18 17:17:25

标签: ios core-data

要了解核心数据,我正在制作一个测验应用,但它不使用表格视图。我有应用程序中播种的两个测验的数据。当用户点击视图上的按钮时,我想获取测验,具体取决于他/她按下的按钮,但我不确定我可以为谓词添加什么

       if ([sender.currentTitle isEqualToString:@"sports"]){

        NSError *error;
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quizdata"
                                                  inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(SELF = %@)", ????];  ///unsure what to put here
        [fetchRequest setPredicate:predicate];
        self.fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
        NSLog(@"fetched object %@", fetchedObjects);

    }else if ([sender.currentTitle isEqualToString:@"entertainment"]){
        NSLog(@"entertainment%@", sender.currentTitle);
    }

我有两个实体,例如Quiz.h,我根据实体的属性创建了类

@dynamic quizId;
@dynamic name;
@dynamic quizData;

和QuizData.h实体

@dynamic answer1;
@dynamic answer2;
@dynamic answer3;
@dynamic answer4;
@dynamic correctAnswer;
@dynamic question;
@dynamic score;
@dynamic unique;
@dynamic quiz;

我希望能够通过做类似于我在Rails中做的事情来获取两个测验中的一个

Quizdata.where(quizId => 1)

是否有可能只按我完成的方式获取运动问题(即不使用表格视图)。我认为tableView可能很重要的原因是它会有对象id。我无法弄清楚如何让CoreData检索quizId 1的每个问题。

我之前用json

导入了这样的数据
{ "question" : "Do you like basketball", "answer1": "yes", "answer2": "no", "answer3": "maybe", "answer4":"of course", "correctAnswer": "yes", "unique": "2", "name": "sportsquiz", "quizId": "1"},

然后插入并用两个类

保存

1 个答案:

答案 0 :(得分:0)

当然......

我没有完全遵循模型中的逻辑,因为我没有看到Quiz和QuizData之间的关系。

如果你有一个,你将在测验中包含一个包含QuizData集合的NSSet。你只需执行这样的NSFetchRequest;

   NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
   NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quiz" inManagedObjectContext:context];
   [fetchRequest setEntity:entity];

   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"quizId >= %@", [NSNumber numberWithInt:1]];
   [fetchRequest setPredicate:predicate];

    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

FetchedObjects将包含一个" Quiz" quizId> = 1的对象。如果您正确设置了关系,则每个测验对象都将包含一组quizData对象。

要记住的主要事情是Core Data是一个Object Graph。因此,您可以将quizData对象添加到Quiz对象(而不是设置关系字段并将关系键添加到Quiz对象)。