0

これがバグかどうかわからないので、アドバイスを求めています...

(xcode 5.1.1 上の iOS 7.1.2)

私のアプリは、多くの大きなデータ イメージをコアデータに保存します。バイナリ イメージの属性は、エンティティで「外部ストレージを許可する」に設定されているため、アプリの _EXTERNAL_DATA サブフォルダーにファイル (guid) が表示されます。

このアプリの存続期間中、ファイルは定期的に変更されるため、既存の画像を上書きしてコンテキストを保存します。

問題は、新しいイメージ ファイル (GUID) の孤立したコピーが表示されるのに、古いイメージ ファイルが削除されないことです。

これは次のように再現できます...

コアデータを利用する「テスト」ボタンを備えたユーティリティ アプリを作成し、単純なエンティティを作成します...

ここに画像の説明を入力

ここに画像の説明を入力

viewDidLoad に最初のエンティティを作成し、それへの参照を保存します....

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    id delegate = [[UIApplication sharedApplication]delegate];
    NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];

    // Create initial external file
    _testEntity = [NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:managedObjectContext];

    UIImage *planeImage = [UIImage imageNamed:@"plane.jpg"];
    _testEntity.image = [NSData dataWithData:UIImagePNGRepresentation(planeImage)];
    [delegate saveContext];
}

次に、ビューのボタンのアクション ハンドラーで、画像を変更するだけです...

-(IBAction)onTestImageButton:(id)sender { int randNum = rand() % 4 + 1;

id delegate = [[UIApplication sharedApplication]delegate];

// Store image - again
UIImage *planeImage = [UIImage imageNamed:[NSString stringWithFormat:@"plane %d.jpg", randNum]];

_testEntity.image = [NSData dataWithData:UIImagePNGRepresentation(planeImage)];
[delegate saveContext]; }

ここでは、それぞれわずかに異なるサイズの 4 つの大きな jpg の平面があります。(サイズが同じであれば問題ありません)

アプリを実行し、「テスト」ボタンを数回押します。まもなく、ファイルのいくつかのバージョンが _EXTERNAL_DATA に表示されます

ここに画像の説明を入力

バージョンは 1 つしかないと思います。画像は孤立し、親エンティティがカスケード削除ルールを介してこれを削除すると、貴重なスペースを占有するファイルが残されます!

これはバグですか、それとも何か間違っていますか?

ありがとう

4

0 に答える 0