Core Data (SQLite) データ モデルでバイナリ プロパティとして永続化される NSData* オブジェクトに double の配列を保存しています。iPhoneアプリでグラフ化するためにサンプリングされたデータを保存するためにこれを行っています。バイナリ オブジェクトに 300 を超える double がある場合、すべての double がディスクに保存されないことがあります。アプリを終了して再起動すると、わずか 25 個のデータ ポイントが保持されるか、最大 300 個のデータ ポイントが保持される場合があります。
同期 = FULL で NSSQLitePragmasOption を使用すると、違いが生じる可能性があります。バグは断続的であるため、見分けるのは困難です。
synchronous = FULL を使用した結果としてのパフォーマンスの問題に関する警告を考慮して、アドバイスとポインタを求めています。
ありがとう。
[[編集: これがコードです。]]
-addToCache: の (まだ実現されていない) 意図は、新しい各データをキャッシュに追加することですが、Data オブジェクトを定期的にフラッシュ (障害?) するだけです。
Data.m から
@動的データセット; // NSData * データエンティティの属性 - (無効) addDatum:(double_t)datum { DLog(@"-[Data addDatum:%f]", datum); [self addToCache:datum]; } - (無効) addToCache:(double_t)datum { if (キャッシュ == nil) { cache = [NSMutableData dataWithData:[self dataSet]]; [キャッシュ保持]; } [キャッシュ appendBytes:&datum 長さ:sizeof(double_t)]; DLog(@"-[Data addToCache:%f] ... [キャッシュの長さ] = %d; キャッシュ = %p", datum, [キャッシュの長さ], cache); [セルフフラッシュキャッシュ]; } - (無効) まとめ { DLog(@"-[データまとめ]"); [セルフフラッシュキャッシュ]; [キャッシュ解放]; キャッシュ = ゼロ; DLog(@"[self isFault] = %@", [self isFault] ? @"YES" : @"NO"); // [self isFault] は常に NO です。 } - (void) フラッシュキャッシュ { DLog(@"ストアへのキャッシュのフラッシュ"); [self setDataSet:キャッシュ]; DLog(@"-[Data flushCache:] [[self dataSet] length] = %d", [[self dataSet] length]); } - (ダブル*) バイト { return (double*)[[self dataSet] バイト]; } - (NSInteger) カウント { return [[self dataSet] length]/sizeof(double); } - (無効) ダンプ { ALog(@"ダンプデータ"); NSInteger numDataPoints = [自己カウント]; double *data = (double*)[self バイト]; ALog(@"numDataPoints = %d", numDataPoints); for (int i = 0; i