2011-03-12 78 views
0

親愛的開發者我想從離屏視圖中創建圖像。從屏幕視圖中查看UIImage

當我啓動我的應用程序的第一個視圖是RootViewController和everthing 工作正常。

當我去其他視圖,並做到這一點。

RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 

UIImage *screenShot = [self imageWithView: root.tableView]; 

(UIImage *) imageWithView:(UIView *)view 

{ 

UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [[UIScreen mainScreen] scale]); 
    [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return img; 

} 

在該應用程序崩潰 「imageWithView:(UIView的*)視圖」 在線 函數[view.layer renderInContext:UIGraphicsGetCurrentContext()];

日誌說 終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因是:「+ entityForName:未能找到NSManagedObjectModel的實體名稱「列表項」

,這發生在RootViewController的上線

NSEntityDescription *entity = [NSEntityDescription entityForName:@"ListItem" inManagedObjectContext:self.managedObjectContext]; 

有人有想法嗎?

+0

我不會對你的代碼發表評論,但該錯誤信息意味着您要麼錯讀coredata實體的名稱,要麼您沒有將您的App委託的managedObjectContext傳遞給您的視圖控制器。換句話說,這與你的'UIImage from offscreen view'問題無關。 – Rog 2011-03-12 08:50:10

+0

thx爲答案...我認爲它的第二點...如何以及在哪裏將managedObjectContext傳遞給其他視圖? – Missaq 2011-03-12 08:57:34

回答

0

正如Rog所說,可能沒有上下文。下面是創建正確的一個代碼:

-(NSManagedObjectContext*) managedContext { 
    @synchronized(self) { 
     if(!_managedObjectContext) { 
      _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
      [_managedObjectContext setPersistentStoreCoordinator: [VIDataManager sharedManager].persistentStoreCoordinator]; 
     } 
    } 

    return _managedObjectContext; 
} 

-(NSPersistentStoreCoordinator*) persistentStoreCoordinator { 
    @synchronized(self) { 
     if(!_persistentStoreCoordinator) { 
      NSLog(@"init _persistentStoreCoordinator"); 
      NSError *error = nil; 
      _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: self.managedObjectModel]; 

      if(![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL: databaseURL() options:nil error: &error]) { 
      } 
     } 
    } 

    return _persistentStoreCoordinator;  
} 

-(NSManagedObjectModel*) managedObjectModel { 
    @synchronized(self) { 
     if(!_managedObjectModel) { 
      NSLog(@"init _managedObjectModel"); 
      NSURL* modelURL = [[NSBundle mainBundle] URLForResource:@"Datamodel" withExtension:@"mom"]; 
      _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL: modelURL]; 
     } 
    } 

    return _managedObjectModel; 

} 

而且在@interface必須聲明3個實例變量和屬性:

NSManagedObjectContext*    _managedObjectContext; 
    NSManagedObjectModel*    _managedObjectModel; 
    NSPersistentStoreCoordinator*  _persistentStoreCoordinator; 

@property(nonatomic, readonly) NSManagedObjectContext*   managedContext; 
@property(nonatomic, readonly) NSManagedObjectModel*   managedObjectModel; 
@property(nonatomic, readonly) NSPersistentStoreCoordinator* persistentStoreCoordinator; 
+0

verry nic!多謝! – Missaq 2011-03-12 15:18:34