2012-09-15 46 views
3

我遇到了一个奇怪的问题。我确信我在代码中的其他地方做了一些事情,并且它没有正确关闭或者其他东西,但现在它处于报告为关闭状态,但是当我调用OpenWithCompletionHandler时,它永远不会返回。见下:UIManagedDocument OpenWithCompletionHandler永不返回

//if the file is closed, open it and then set up the controller 
    if (file.documentState == UIDocumentStateClosed){ 
     //---- this code executes   
     [file openWithCompletionHandler:^(BOOL success){ 
      // ---- this code NEVER executes 
     }]; 
    } 

任何想法?

+0

你有没有搞清楚是什么问题?在升级到6.0 SDK后,我无法使用openWithCompletionHandler在iOS 5.1中工作。它永远不会返回。 –

+0

没有。我几个星期没有看到这个问题,但我现在也在iOS6上。 –

+0

我有同样的问题...使用XCode 4.5.2(4G2008a),使用iOS模拟器6.0,但使用iOS 5.1操作系统... openWithCompletionHandler永远不会触发封闭的数据库。我有一个HUD在完成射击时降低,因此HUD保持不变,这在模拟器中显然是很痛苦的。 – Joe

回答

0

请参阅Bug in iPhone Simulator 5.1 with Xcode 4.5 using UIManagedDocument

我的解决方案和那些报告一样,但我不得不将我的应用的部署目标降低到iOS 5.0,以便“iPhone 5.0 Simulator”可用作运行目标。我只看到这个问题试图使用iPhone 5.1模拟器与XCode 4.5.2,5.0和6.0模拟器工作。

0

我遇到了同样的问题。

您是否试图在viewDidLoad内打开文档?

尝试将代码移至其他方法。它解决了我的问题。

在ViewController.h

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext; 
@property (nonatomic,strong) UIManagedDocument *document; 

在ViewController.m

@synthesize managedObjectContext = _managedObjectContext; 
@synthesize document = _document; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Do not try to open the document here 
    // Call another method instead :D 
    if (!_managedObjectContext) { 
     [self createContext]; 
    } 
} 

- (void)createContext 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSURL *url = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    url = [url URLByAppendingPathComponent:@"Database"]; 

    self.document = [[UIManagedDocument alloc] initWithFileURL:url]; 

    // FILE DOES NOT EXIST - Let's create a new one  
    if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) { 
     [self.document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { 
      if (success) { 
       self.managedObjectContext = self.document.managedObjectContext; 
      } else { 
       NSLog(@"ERROR: Cannot create new document"); 
      } 
     }]; 

    // FILE IS CLOSED - Let's open it 
    } else if (self.document.documentState == UIDocumentStateClosed) { 
     [self.document openWithCompletionHandler:^(BOOL success) { 
      if (success) { 
       self.managedObjectContext = self.document.managedObjectContext; 
      } else { 
       NSLog(@"File is closed and it wont open!"); 
      } 
     }]; 

    // FILE EXISTS AND IS OPENED - Yay! 
    } else { 
     self.managedObjectContext = self.document.managedObjectContext; 
    } 
}