Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSFetchedResultsController委托仅在谓词为nil时触发_Iphone_Ios_Nsfetchedresultscontroller - Fatal编程技术网

Iphone NSFetchedResultsController委托仅在谓词为nil时触发

Iphone NSFetchedResultsController委托仅在谓词为nil时触发,iphone,ios,nsfetchedresultscontroller,Iphone,Ios,Nsfetchedresultscontroller,我开发这个应用已经几个月了,我们决定在上面实现核心数据。 我正在使用魔幻唱片,但这个问题在魔幻唱片出现之前就已经存在了 当我们在后台线程中保存数据时,应用程序加载一个具有fetchedResultsController的视图 (不工作) (工作-通知谓词设置为nil) 如果您想知道我们在调用此方法的后台线程中插入数据: -(void)callWithID:(NSDictionary*)newCall{ [MagicalRecord saveInBackgroundWithBlock:^(

我开发这个应用已经几个月了,我们决定在上面实现核心数据。 我正在使用魔幻唱片,但这个问题在魔幻唱片出现之前就已经存在了

当我们在后台线程中保存数据时,应用程序加载一个具有fetchedResultsController的视图

(不工作)

(工作-通知谓词设置为nil)

如果您想知道我们在调用此方法的后台线程中插入数据:

    -(void)callWithID:(NSDictionary*)newCall{
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
    ICCall *call = nil;

    call = [ICCall MR_findFirstWithPredicate:
            [NSPredicate predicateWithFormat:@"id_Chamada = %@",[newCall valueForKey:@"id_Chamada"] ]
                                   inContext:localContext];

    if(call)
    {
        // Call already Exists, update it?
    }
    else
    {
        call = [ICCall MR_createInContext:localContext ];
        call.id_Chamada = [newCall valueForKey:@"id_Chamada"];
        call.id_user = [newCall valueForKey:@"id_user"];
        call.designacao = [newCall valueForKey:@"designacao"];
        call.telefone = [newCall valueForKey:@"telefone"];
        call.data = [newCall valueForKey:@"data"];
        call.assunto = [newCall valueForKey:@"assunto"];
        call.mensagem = [newCall valueForKey:@"mensagem"];
        call.importancia = [newCall valueForKey:@"importancia"];
        call.ligar_volta = [newCall valueForKey:@"ligar_volta"];
        call.respondido = [newCall valueForKey:@"respondido"];
        call.respondido_data = [newCall valueForKey:@"respondido_data"];
        call.lido = [newCall valueForKey:@"lido"];
        call.eliminadoFO = [newCall valueForKey:@"eliminadoFO"];
        call.notas = [newCall valueForKey:@"notas"];
        call.favorito = [newCall valueForKey:@"favorito"];
        NSLog(@"--------------------------- CALL");
    }

} completion:^{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[NSManagedObjectContext MR_defaultContext] save];
    }];
}];}
因此,如果在fetchedResultsController中设置谓词,则在后台插入信息时,fetchedResultsController委托不会触发,如果未设置谓词,则所有fetchedResultsController委托方法都会正确触发

这个问题一直存在,因为在MagicalRecord包装之前,我甚至尝试过其他包装,但都没有用。 从上周开始,我就一直在努力解决这个问题,没有选择了。。。 一位朋友建议我不要使用线程,但我真的不想这样做。
建议?

您调试了存储对象的用户ID和prefs中的值?它们是完全匹配的吗?如果我离开主视图,或者干脆关闭应用程序并再次执行,新记录会显示。。。所以所有的值都是正确的…那么FRC上的委托设置在哪里?我在视图中设置它,并在初始化FRC的地方加载:NSError*error;如果(![[self-fetchedResultsController]performFetch:&error]){//更新以适当处理错误。NSLog(@“Unresolved error%@,%@”,error,[error userInfo]);退出(-1);//失败}fetchedResultsController.delegate=self;
    - (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
    return fetchedResultsController;
}
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id_user = %@",[prefs valueForKey:@"userID"]];
fetchedResultsController = [ICCall MR_fetchAllGroupedBy:nil
               withPredicate:nil
                    sortedBy:@"id_Chamada"
                   ascending:NO
                   inContext:[NSManagedObjectContext MR_defaultContext]];

return fetchedResultsController;}
    -(void)callWithID:(NSDictionary*)newCall{
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
    ICCall *call = nil;

    call = [ICCall MR_findFirstWithPredicate:
            [NSPredicate predicateWithFormat:@"id_Chamada = %@",[newCall valueForKey:@"id_Chamada"] ]
                                   inContext:localContext];

    if(call)
    {
        // Call already Exists, update it?
    }
    else
    {
        call = [ICCall MR_createInContext:localContext ];
        call.id_Chamada = [newCall valueForKey:@"id_Chamada"];
        call.id_user = [newCall valueForKey:@"id_user"];
        call.designacao = [newCall valueForKey:@"designacao"];
        call.telefone = [newCall valueForKey:@"telefone"];
        call.data = [newCall valueForKey:@"data"];
        call.assunto = [newCall valueForKey:@"assunto"];
        call.mensagem = [newCall valueForKey:@"mensagem"];
        call.importancia = [newCall valueForKey:@"importancia"];
        call.ligar_volta = [newCall valueForKey:@"ligar_volta"];
        call.respondido = [newCall valueForKey:@"respondido"];
        call.respondido_data = [newCall valueForKey:@"respondido_data"];
        call.lido = [newCall valueForKey:@"lido"];
        call.eliminadoFO = [newCall valueForKey:@"eliminadoFO"];
        call.notas = [newCall valueForKey:@"notas"];
        call.favorito = [newCall valueForKey:@"favorito"];
        NSLog(@"--------------------------- CALL");
    }

} completion:^{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[NSManagedObjectContext MR_defaultContext] save];
    }];
}];}