0

UIManagedDocumentインスタンスが開かれているとき(ドキュメントの状態は正常ですか?)、UIManagedDocumentが空かどうかを確認するにはどうすればよいですか?ここで「空」とは、ドキュメント内にエンティティがまったくないことを意味します。

それとも、まだ閉じているときに空をチェックするだけでいいですか?

if (self.photoDatabase.documentState == UIDocumentStateClosed) 
{ 
    [self.photoDatabase openWithCompletionHandler:^(BOOL success) {}];
    [self setupFetchedResultsController];  

    if ( // check if document is empty  )
        {  
            [self fetchFlickrDatatoDocument:self.photoDatabase]; 
        }
}
4

1 に答える 1

1

ここにいくつかの答え...

まず、作成したドキュメントは確実に空になります。ファイルシステムにクエリを実行するだけで、ファイルが存在するかどうかを確認できます。

空のままの場合、そもそもなぜ作成したのですか?

空のデータベースファイルを開く習慣がある場合は、「空」の意味に応じて、さまざまな方法で「空」かどうかを判断できます。

フェッチを実行して、レコードの数を取得します。0を返す場合、データベースは空です。

データベースに関するメタデータを保持する「特別な」エンティティのフェッチを実行します。そこにない場合、データベースは空です。

編集

エンティティがないかどうかを確認するには、カウントを要求するだけです...

NSFetchRequest fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:fetchRequest error:&error];
if (count == NSNotFound) {
    // Handle error
} else if (count == 0) {
    // The document is empty, i.e., has no entities of this type
} else {
    // The document contains <count> entities.
}

または、1つのエンティティをフェッチするだけです...

NSFetchRequest fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetchRequest.fetchLimit = 1;
NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (objects == nil) {
    // Handle error
} else if (objects.count == 0) {
    // The document is empty, i.e., has no entities of this type
} else {
    // The document contains at least one entity.
}

編集

申し訳ありませんが、フィリップ、しかしその最後のコメントは私には意味がありません。データベースに、特定のエンティティタイプのアイテムがいくつあると仮定して、いくつのアイテムがあるかを教えてもらうにはどうすればよいですか。

それは子供のカードゲームのようなものです:

私:よ、データベース、あなたは四つんばいを持っていますか?CoreData:魚に行きなさい。

さて、あなたのコメントでの私の最も良い推測は、あなたがデータベースモデルをデータベースレコードと混同しているということです。

データベースを作成するときに、モデルを作成しました。GUIを使用して、またはコードでモデルを作成しましたか?いずれにせよ、データベースに含まれるエンティティのタイプとそれらの間の関係については、すでにデータベースに伝えています。

データベースを最初に作成するとき、データベースはすでにすべてのエンティティについて認識しています(これが、管理対象オブジェクトモデルのすべてです)。コアデータの管理対象オブジェクトコンテキストには、管理対象オブジェクトモデルを必要とする永続ストアが必要です。

したがって、コアデータスタックが完全にインスタンス化されると、データベースに含まれるエンティティのタイプについて必要なすべての知識が得られます。

于 2012-08-03T21:43:17.877 に答える