我计划加载视频路径通过Youtube上传。
但[GDataUtilitIEs MIMETypeForfileAtPath:path defaultMIMEType:@“vIDeo / mp4”];
它只接受Nsstring。
是否可能将NSUrl转换为Nsstring的视频文件路径。
我试图使用Nsstring * path = [ExportoutputURL absoluteString];
但它崩溃。
这里是代码
- (voID)exportDIDFinish:(AVAssetExportSession*)session { ExportoutputURL = session.outputURL; _exporting = NO; NSIndexPath *exportCellindexPath = [NSIndexPath indexPathForRow:2 inSection:kProjectSection]; ExportCell *cell = (ExportCell*)[self.tableVIEw cellForRowAtIndexPath:exportCellindexPath]; cell.progressVIEw.progress = 1.0; [cell setProgressVIEwHIDden:YES animated:YES]; [self updateCell:cell forRowAtIndexPath:exportCellindexPath]; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; if ([library vIDeoAtPathIsCompatibleWithSavedPhotosAlbum:ExportoutputURL]) { [library writeVIDeoAtPathToSavedPhotosAlbum:ExportoutputURL completionBlock:^(NSURL *assetURL,NSError *error){ dispatch_async(dispatch_get_main_queue(),^{ if (error) { NSLog(@"writeVIDeoToAssestslibrary Failed: %@",error); UIAlertVIEw *alertVIEw = [[UIAlertVIEw alloc] initWithTitle:[error localizedDescription] message:[error localizedRecoverySuggestion] delegate:nil cancelbuttonTitle:@"OK" otherbuttonTitles:nil]; [alertVIEw show]; [alertVIEw release]; } else { _showSavedVIDeoToAssestslibrary = YES; ExportCell *cell = (ExportCell*)[self.tableVIEw cellForRowAtIndexPath:exportCellindexPath]; [cell setDetailTextLabelHIDden:NO animated:YES]; [self updateCell:cell forRowAtIndexPath:exportCellindexPath]; NSArray *modes = [[[NSArray alloc] initWithObjects:NSDefaultRunLoopMode,UITrackingRunLoopMode,nil] autorelease]; [self performSelector:@selector(hIDeCameraRollText) withObject:nil afterDelay:5.0 inModes:modes]; } }); }]; } [library release];}- (voID)uploadVIDeofile { Nsstring *devKey = DEVELOPER_KEY; GDataServiceGoogleYouTube *service = [self youTubeService]; [service setYouTubedeveloperKey:devKey]; NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:kGDataServiceDefaultUser]; // load the file data Nsstring *path = [ExportoutputURL absoluteString];//[[NSBundle mainBundle] pathForResource:@"vIDeo_2451" ofType:@"mp4"];//[mfilePathFIEld stringValue]; NSfileHandle *fileHandle = [NSfileHandle fileHandleForReadingAtPath:path]; Nsstring *filename = [path lastPathComponent]; // gather all the Metadata needed for the mediaGroup Nsstring *TitleStr = @"Upload Test";//[mTitleFIEld stringValue]; GDataMediaTitle *Title = [GDataMediaTitle textConstructWithString:TitleStr]; Nsstring *categoryStr = @"Entertainment";//[[mcategoryPopup selectedItem] representedobject]; GDataMediacategory *category = [GDataMediacategory mediacategoryWithString:categoryStr]; [category setScheme:kGDataSchemeYouTubecategory]; Nsstring *descStr = @"GData Description";//[mDescriptionFIEld stringValue]; GDataMediaDescription *desc = [GDataMediaDescription textConstructWithString:descStr]; Nsstring *keywordsstr = @"RAGOpoR Demo";//[mKeywordsFIEld stringValue]; GDataMediaKeywords *keywords = [GDataMediaKeywords keywordsWithString:keywordsstr]; BOol isPrivate = NO;//([mPrivateCheckBox state] == NSOnState); GDataYouTubeMediaGroup *mediaGroup = [GDataYouTubeMediaGroup mediaGroup]; [mediaGroup setMediaTitle:Title]; [mediaGroup setMediaDescription:desc]; [mediaGroup addMediacategory:category]; [mediaGroup setMediaKeywords:keywords]; [mediaGroup setIsPrivate:isPrivate]; Nsstring *mimeType = [GDataUtilitIEs MIMETypeForfileAtPath:path defaultMIMEType:@"vIDeo/mp4"]; // create the upload entry with the mediaGroup and the file GDataEntryYouTubeUpload *entry; entry = [GDataEntryYouTubeUpload uploadEntryWithMediaGroup:mediaGroup fileHandle:fileHandle MIMEType:mimeType slug:filename]; SEL progressSel = @selector(ticket:hasDeliveredByteCount:ofTotalByteCount:); [service setServiceUploadProgressSelector:progressSel]; GDataServiceTicket *ticket; ticket = [service fetchEntryByInsertingEntry:entry forFeedURL:url delegate:self dIDFinishSelector:@selector(uploadTicket:finisheDWithEntry:error:)]; [self setUploadTicket:ticket]; GTMhttpUploadFetcher *uploadFetcher = (GTMhttpUploadFetcher *)[ticket objectFetcher];}
错误EXC_BAD_ACCESS在
Nsstring *path = [ExportoutputURL absoluteString];解决方法
Is it possible to convert NSUrl in to Nsstring for vIDeo file path.
是。发送一个absoluteString消息。
i have try to use Nsstring *path = [ExportoutputURL absoluteString]; but it crash.
如果你想要一个路径,则向URL发送一个路径消息。表示URL的字符串通常不是有效路径;如果你想要一个路径,问一个。
至于崩溃,这不意味着absoluteString是错误的。向NSURL对象发送absoluteString是获取表示URL的Nsstring对象的正确方法。问题是别的地方。
Error EXC_BAD_ACCESS at
06000
这可能意味着ExportoutputURL指向不是nil但也不是有效对象的东西。它可能已经指向一个NSURL对象在某一点,但它现在不是。
我的猜测是,问题是这样的:
06001
您将该URL指定给ExportoutputURL实例变量,但不保留对象或创建自己的副本。因此,你不拥有这个对象,这意味着你不保持它活着。它可能在任何时候死,最可能在这个方法(exportDIDFinish :)返回后。
崩溃是因为您稍后在URL对象已经死亡后调用uploadVIDeofile。您仍然有一个指向它的指针,但该对象不再存在,因此发送消息到它 – 任何消息 – 导致崩溃。
有三个简单的解决方案:
>将URL对象分配给实例变量时保留该对象。
>创建自己的URL对象副本并将其分配给实例变量。
>将ExportoutputURL声明为具有strong关键字或copy关键字的属性,并将对象分配给属性,而不是实例变量。这将调用属性的setter,如果你合成它或正确实现它,将保留或复制的URL。
无论哪种方式,你将拥有该对象,并将保持它活着,直到你释放它。因此,当你完成它(在dealloc,如果不是更早),你将需要释放它,所以你不会泄漏它。
这一切都假定你不使用ARC。如果您使用Xcode 4.2或更高版本,并且可能需要iOS 4或更高版本,您应该将您的项目迁移到ARC,因为它使得这么多的东西更简单。如果您使用ARC,则不需要保留或复制此对象,这意味着现在迁移到ARC是第四个解决方案(但当然是更大规模的解决方案)。
总结以上是内存溢出为你收集整理的objective-c – 如何转换NSUrl到NSString?全部内容,希望文章能够帮你解决objective-c – 如何转换NSUrl到NSString?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)