2012-09-16 169 views
0

我正在開發一個名爲safekeep的應用程序。我必須通過轉換爲數據使用coredata導入視頻。如何使用coredata導入視頻?

if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:@"public.movie"]) 
{ 
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
    NSLog(@"Q: video path: %@",[videoURL description]); 

    self.videoData=[NSData dataWithContentsOfURL:videoURL]; 
    if(self.videoData) 
     { 
     NSLog(@"data is present"); 
     NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
     NSManagedObject *imagetblObj= [NSEntityDescription insertNewObjectForEntityForName:@"VideoData" inManagedObjectContext:context]; 
     [imagetblObj setValue:self.videoData forKey:@"videodata"]; 
     [imagetblObj setValue:str forKey:@"date"]; 
     NSError *err; 
     if (![context save:&err]) 
     { 
      NSLog(@"Couldn't save history item into coredata"); 
     } 

     NSLog(@"data saved"); 
     [self videodatafromdb]; 
    } 
} 

-(void)videodatafromdb 
{ 
    NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"VideoData" inManagedObjectContext:context]; 
    [request setEntity:entity]; 
NSError *error; 
NSArray *recordsData=[context executeFetchRequest:request error:&error]; 
self.videoarray=[[recordsData reverseObjectEnumerator]allObjects]; 
NSLog(@"Array count is %d",[self.videoarray count]); 
if ([self.videoarray count]>0) 
{ 
    [self createScrollViewvideo]; 
} 
} 

-(void)createScrollViewvideo 
{ 
    NSLog(@"in create scrollviewvideo"); 
    //add views to scrolview 
    int x=5; 
    int y=17; 
    for(int i=0;i<[videoarray count];i++) 
    { 
     UIImage *imag=[[UIImage alloc] init]; 
     UIView *videoview=[[UIView alloc] initWithFrame:CGRectMake(x, y, 100, 100)]; 
     videoview.tag=i; 

     UIButton *userButton=[[UIButton alloc]initWithFrame:CGRectMake(1, 1, 100,100)]; 
     [userButton addTarget:self action:@selector(userVideoClicked:) forControlEvents:UIControlEventTouchUpInside]; 
     userButton.tag=i; 
     imag=[UIImage imageWithData:videoData]; 

     [userButton setBackgroundImage:imag forState:UIControlStateNormal]; 

     [videoview addSubview:userButton]; 
     [self.scrollview addSubview:videoview]; 


     [userButton release]; 
     [videoview release]; 

     x+=104; 
     if ((i+1)%3==0) 
     { 
      y+=110; 
      x=5; 
     } 

    } 
    NSLog(@"10000in create scrollview"); 
    if (y+110>self.scrollview.frame.size.height) 
    { 
     self.scrollview.contentSize=CGSizeMake(320, y+110); 
    } 
    else 
    { 
     self.scrollview.contentSize=CGSizeMake(320, self.scrollview.frame.size.height+60); 
    } 
} 
} 

- (IBAction爲)userVideoClicked:(ID)發送方 { 的NSLog(@ 「視頻點擊」);

UIButton *button=(UIButton*)sender; 

VideoData *videoobj=(VideoData *)[self.videoarray objectAtIndex:[button tag]]; 

NSLog(@"video data is %@",videoobj); 

VidoesVIewController *videoviewcontroller=[[VidoesVIewController alloc] initWithNibName:@"VidoesVIewController" bundle:nil]; 

videoviewcontroller.videodata=[videoobj valueForKey:@"videodata"]; 

[self.navigationController pushViewController:videoviewcontroller animated:YES]; 

[videoviewcontroller release]; 

}

的影片不是sroll view.But顯示當點擊視頻文件時,它導航。當圖像設置爲按鈕時,圖像顯示在視圖中。提前感謝。

+0

我看不到您將影片播放器視圖或縮略圖添加到'videoview'。 –

+0

爲什麼你使用coredata來存儲電影?您可以將它存儲在文檔文件夾等中,並將其放入coredata url中。 – NeverBe

+0

我正在存儲這個電影文件夾,但得到這部電影使用coredata – fathik

回答

0

見我的答案:

Can I access the files used for external binary storage in Core Data?

我想出了一個「創意」的解決方案(無論它最好的做法是任何人的猜測),但它可以讓你使用核心數據管理文件同時仍然能夠通過它們的路徑訪問REAL文件。

通過在二進制字段中使用「允許外部存儲」選項,您可以允許核心數據爲您管理對文件的引用,從而抽取相當多的繁忙工作。