CoreData:findAllWithPredicate是否正常工作?

时间:2012-12-20 10:16:58

标签: ios core-data magicalrecord

我正在使用魔法记录库。很酷,但我有点麻烦。 我的第二种方法返回错误数据。第一种和第二种方法必须返回相同数量的报价。 findAllWithPredicate是否正常工作?

UNLOCK AND FETCH QUOTES

-(NSArray*) unlockAndFetchQuotes
{
 CoreDataManager *instance = [CoreDataManager instance];
 [instance unlockUnitNumber:1];
 return [instance fetchQuotes];
}

解锁单位号

-(void) unlockUnitNumber:(int) number
{
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"identificator=%d", number];
 NSArray *array =[CDInApp findAllWithPredicate:predicate];
 if (array.count>0)
 {
    CDInApp *inApp = [array objectAtIndex:0];
    inApp.isLockedValue = NO;
    [[NSManagedObjectContext defaultContext] saveNestedContexts];
 }
}

FETCH QUOTES

-(NSArray*) fetchQuotes
{
 int z=0;
 NSArray *arr = [CDQuotes findAll];
 for (CDQuotes * quotes in arr)
 {
    if (!quotes.inApp.isLockedValue)
    {
        z++;
    }
 }
   NSLog(@"_____ unlocked quotes by first method %d", z);


 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"inApp.isLocked != 1"];
 int count = [CDQuotes countOfEntitiesWithPredicate:predicate];
   NSLog(@"_____ unlocked quotes by second method %d", count);

 NSArray *array = [CDQuotes findAllWithPredicate:predicate];
   NSLog(@"total unlocked array %d", array.count);

 return array;
}

第一种和第二种方法必须返回相同数量的报价。第二种方法无法正常工作。

我的输出

___ must be unlocked quotes 500
___ unlocked quotes by first method 500
___ unlocked quotes by second method 250
total unlocked array 250

enter image description here

UPDATE2

我发现了一个问题。首先我做unlockAndFetchQuotes。我跟踪这个功能,发现一些奇怪的东西。 在获取引号之后保存到coredata。现在我正在寻找可以立即保存的解决方案。

2012-12-21 18:13:32.992 CoreBug[6713:11603] _____ unlocked quotes by first method 8
2012-12-21 18:13:32.994 CoreBug[6713:11603] _____ unlocked quotes by second method 6
2012-12-21 18:13:32.996 CoreBug[6713:11603] -[NSManagedObjectContext(MagicalSaves) MR_saveWithErrorCallback:](0x7464700) -> Saving <NSManagedObjectContext (0x7464700): *** DEFAULT ***> on *** MAIN THREAD ***
2012-12-21 18:13:32.997 CoreBug[6713:15603] -[NSManagedObjectContext(MagicalSaves) MR_saveWithErrorCallback:](0x8148ef0) -> Saving <NSManagedObjectContext (0x8148ef0): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***

我解锁了我的单位并取了引号。

3 个答案:

答案 0 :(得分:1)

您在循环中使用的是isLockedValue,而不是isLocked。据推测,isLockedValue不存在且始终为nil,导致循环中的所有项目都被计算在内。

相比之下,你的谓词似乎工作正常。

答案 1 :(得分:0)

您是否尝试过将谓词更改为

[NSPredicate predicateWithFormat:@"inApp.isLocked = NO"]

答案 2 :(得分:0)

saveNestedContexts是异步方法。我需要使用另一种方法

[localContext MR_saveNestedContextsErrorHandler:nil completion:^{
        [self fetchQuotes];
    }];