1

マギアレコードライブラリーを使用しています。かっこいいですが、問題があります。2番目のメソッドは誤ったデータを返します。1番目と2番目のメソッドは、同じ量の引用符を返す必要があります。findAllWithPredicateは正しく機能しますか?

見積もりの​​ロックを解除して取得する

-(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];
 }
}

引用符を取得

-(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;
}

1番目と2番目のメソッドは、同じ量の引用符を返す必要があります。2番目の方法は正しく機能しません。

私の出力

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

ここに画像の説明を入力してください

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 ***

ユニットのロックを解除し、見積もりを取得しました。

4

3 に答える 3

1

isLockedValueの代わりに、ループで使用していますisLocked。おそらく、isLockedValue存在せず、常に存在するためnil、ループ内のすべてのアイテムがカウントされます。

対照的に、述語は正しく機能しているようです。

于 2012-12-20T11:39:35.237 に答える
0

述語を次のように変更してみましたか

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

于 2012-12-20T19:32:41.213 に答える
0

saveNestedContextsは非同期メソッドです。別の方法を使用する必要があります

[localContext MR_saveNestedContextsErrorHandler:nil completion:^{
        [self fetchQuotes];
    }];
于 2012-12-22T18:25:58.830 に答える