5

ブロックを使用してアプリケーション全体で共有されるディスク上のドキュメントごとにグローバル UIManagedDocument インスタンスを作成するにはどうすればよいですか? しかし、私は本当にそれを理解していません。

私が達成したいのは、アプリ全体に対して 1 つの UIManagedDocument (コア データ データベース) のみが存在することです。異なるオブジェクトがメソッドを呼び出して、唯一の UIManagedDocument を取得する必要があります。

クラス メソッドでヘルパー クラスを使用します。

+ (UIManagedDocument *)getsharedDatabase:(NSString *)databaseName
{
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:databaseName];
    // url is now "<Documents Directory>/<databaseName>"

    if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]])
    {
        // does not exist on disk, so create one
        UIManagedDocument *managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];

        return managedDocument;
    }
    else
    {
        UIManagedDocument *managedDocument = **?????**

        return managedDocument;
    }
}

疑問符でわかるように、既存のファイルを取得する方法がわかりません。UIManagedDocument クラス リファレンスを確認しましたが、見つかりませんでした。

助けてくれませんか?よろしくお願いします。

編集 私は疑問に思っていました...次のようなシングルトンメソッドはどうですか:

+ (UIManagedDocument *) sharedDatabase
{
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"databaseName"];
    // url is now "<Documents Directory>/databaseName"

    static UIManagedDocument *managedDocument = nil;
    static dispatch_once_t mngddoc;

    dispatch_once(&mngddoc, ^{
            managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];
    });

    return managedDocument;
}
4

1 に答える 1

0

ディスク上に既存の UIManagedDocuments がある場合は、一致するファイルをディレクトリで検索する必要があります。通常、ファイルには、一般的なファイル拡張子などの識別属性があります。

このようなもの:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSURL *appDirectoryURL = [appDelegate applicationDocumentsDirectory];
NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:appDirectoryURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:nil];

for (NSURL *fileURL in directoryContents) {
    NSString *documentExtension = [fileURL pathExtension];

    if ([documentExtension isEqualToString:@"myfileextension"]) {
    }
}
于 2012-09-25T00:30:22.603 に答える