objective-c – 如何转换NSUrl到NSString?

objective-c – 如何转换NSUrl到NSString?,第1张

概述AVAssetExportSession完成后导出视频。 我计划加载视频路径通过Youtube上传。 但[GDataUtilities MIMETypeForFileAtPath:path defaultMIMEType:@“video / mp4”]; 它只接受NSString。 是否可能将NSUrl转换为NSString的视频文件路径。 我试图使用NSString * path = [Expo AVAssetExportSession完成后导出视频。
我计划加载视频路径通过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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存