2012-02-24 7 views
5

私は既にHow do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks?を見てきましたが、実際には得られません。異なるオブジェクト間で1つのUIManagedDocumentをどのように共有できますか?

私が達成したいのは、アプリケーション全体のために、コアデータデータベースであるUIManagedDocumentが1つだけであることです。異なるオブジェクトはメソッドを呼び出して、唯一の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クラス参照をチェックしましたが、それを見つけることができませんでした。

お願いします。 事前に感謝します。私が思っていた

EDIT ...のようなシングルトン方法について何:あなたは、ディスク上の既存UIManagedDocumentsを持っている場合は

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

あなたのシングルトンの方法は、進むべき道のように見えます。あなたはそれを最適化するために、dispatch_onceの中でURL作成コードを移動することができます。 – Felix

+0

コリン・ウィーラーが私のインスピレーションを受けてくれたことを信じて、ありがとうございました。 - http://stackoverflow.com/a/2200751/1096476 – uem

答えて

0

、あなたが一致するファイルをディレクトリを検索する必要があります。通常、ファイルには共通のファイル拡張子のような識別属性があります。このような

何か:

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"]) { 
    } 
} 
関連する問題