2012-02-24 28 views
5

Tôi đã xem How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks? nhưng tôi không thực sự hiểu.Làm cách nào để chia sẻ một UIManagedDocument giữa các đối tượng khác nhau?

Điều tôi muốn đạt được là chỉ nên có một tài liệu UIManagedDocument - một cơ sở dữ liệu lõi - cho toàn bộ ứng dụng. Các đối tượng khác nhau nên gọi một phương thức và nhận được một và chỉ UIManagedDocument.

tôi sử dụng một lớp helper với một phương pháp học:

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

Như bạn có thể nhìn thấy bằng các dấu hỏi, tôi không biết làm thế nào để có được những tập tin hiện có. Tôi đã kiểm tra tham chiếu lớp UIManagedDocument nhưng không thể tìm thấy nó.

Bạn có thể giúp tôi không? Rất cám ơn trước.

EDIT tôi đã tự hỏi ... những gì về một phương pháp singleton như:

+ (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

phương pháp singleton của bạn trông giống như con đường để đi. bạn có thể di chuyển mã tạo url bên trong dispatch_once để tối ưu hóa nó. – Felix

+0

Tuyệt vời, cảm ơn bạn, để cho tín dụng nơi tín dụng đến hạn: Colin Wheeler là nguồn cảm hứng của tôi - http://stackoverflow.com/a/2200751/1096476 – uem

Trả lời

0

Nếu bạn hiện có UIManagedDocuments trên đĩa, bạn cần phải tìm kiếm các thư mục cho phù hợp với tập tin. Thông thường, các tệp sẽ có một số thuộc tính nhận dạng, như một phần mở rộng tệp chung.

Something như thế này:

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"]) { 
    } 
} 
Các vấn đề liên quan