我正在使用相机拍照的iPhone应用程序,然后我将它们保存到Applications Documents目录中.我正在使用以下代码将UIImage转换为NSData,
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
Run Code Online (Sandbox Code Playgroud)
然后我用NS编写NSData
[imageData writeToFile:path atomically:NO]
Run Code Online (Sandbox Code Playgroud)
一切正常.问题是UIImagePNGRepresentation()非常慢.我的3G需要8-9秒才能将图像转换为NSData.这对我来说似乎不对.有人对这个有经验么?这只是缓慢的功能还是我做了一件非常糟糕的事情?
谢谢
我正在尝试显示我在UIWebView中本地存储的PDF.这就是我目前尝试这样做的方式:
if (![[NSFileManager defaultManager] fileExistsAtPath:self.url]) {
LOG_ERROR(@"Couldn't load local file. File at path: %@ doesn't exist", self.url);
return;
}
nsurl=[NSURL fileURLWithPath:self.url];
NSData *data = [NSData dataWithContentsOfFile:self.url];
LOG_DEBUG(@"data length:%d",[data length]);
[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
Run Code Online (Sandbox Code Playgroud)
我也试过传递nil for textEncoding,以及使用UIWebView的loadRequest.结果是一个显示空白页面的UIWebView.UIWebView委托方法中没有错误发生.奇怪的是,对于我试图显示的PDF,数据具有正确的长度(以字节为单位),这意味着正在找到并正确加载文件.
有没有人知道这里可能出现的问题或者我如何更好地调试这个问题?
大家好,我想知道是否可以使用MPMoviePlayerController从NSData对象播放视频.
谢谢,塞尔吉奥
我正在将.jpg文件写入我的应用程序的Documents目录,如下所示:
NSData *img = UIImageJPEGRepresentation(myUIImage, 1.0);
BOOL retValue = [img writeToFile:myFilePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)
之后,我使用以下命令将该图像加载回UIImage:
UIImage *myImage = [UIImage imageWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)
我知道它有效,因为我可以在表格单元格中绘制图像,这很好.现在,如果我尝试使用UIImageJPEGRepresentation(myImage,1.0),调试器会打印出这些行:
<Error>: Not a JPEG file: starts with 0xff 0xd9
<Error>: Application transferred too few scanlines
Run Code Online (Sandbox Code Playgroud)
函数返回nil.有没有人知道为什么会这样?加载后我没有做任何事情来操纵UIImage数据.我刚刚将UIImage提供给单元格中的图像视图.我设置了图像视图属性,使得单元格中的所有图像对齐并且大小相同,但我认为这与将UIImage转换为NSData无关.
我有一个问题,而试图转换NSString到NSData,反之亦然.我试图将加密的字符串存储到我的数据库.为此,我使用AES算法.现在我正在做的是我加密NSData,我正在将其转换为NSString使用以下内容:
// Not woking
NSString *strTemp = [[NSString alloc] initWithData:encData encoding:NSUTF8StringEncoding];
// Working
NSString *strTemp = [[NSString alloc] initWithData:encData encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)
为什么NSData在使用时不进行转换NSUTF8StringEncoding.当我尝试NSASCIIStringEncoding使用以下方法转换字符串时的方式相同:
// Not working
[strTemp dataUsingEncoding:NSASCIIStringEncoding];
// Working
[strTemp dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
为什么NSASCIIStringEncoding在转换工作不NSString给NSData?
A有一些NSValue(通过KVC获得valueForKey)我需要附加到一个NSData对象,以便使用Game Center通过网络发送它.显然,我还需要将NSValue背面转换NSData为更多的KVC(setValue:forKey:).
我不知道每一个确切的类型NSValue,所以我仅限于使用所提供的接口NSValue和NSData.我应该提一下,NSValue它们永远不是指针类型.
我很惊讶没有[NSData dataWithValue:value],也没有[value dataWithEncoding:]类似的东西.但也许我是盲目的,没有看到明显的选择.我考虑过使用getValue:将值复制到void*缓冲区中,但除了使用objCType并将其与所有可能的类型进行比较之外,我应该如何确定缓冲区长度?
我该怎么办呢?
注意:
NSKeyedArchiver这是不可能的,因为它非常低效.4字节浮点数归档为142字节NSData,8字节CGPoint归档时使用260字节NSData.将发送的数据量保持在最低限度对我正在做的事情至关重要.
如何将CMSampleBufferRef转换为NSData?
我已经设法MPMediaItem通过跟踪Erik Aigner在这个线程上的答案来获取数据,但数据是类型的CMSampleBufferRef.
我知道CMSampleBufferRef是一个结构,在iOS Dev Library 的CMSampleBuffer Reference中定义,但我不认为我完全理解它是什么.CMSampleBuffer函数似乎都不是一个明显的解决方案.
可能重复:
如何在每个"X"分钟内调用函数?
如何定期调用某个功能?
- (void)viewDidLoad
{
[super viewDidLoad];
[self checkAlert];
}
-(void)checkAlert{
// Server output Alert Note
NSString *alert_note_hostStr = @"http://www.loxleyintranet.com/MobileApplication/xml/alert_note.php";
NSData *alert_note_dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:alert_note_hostStr]];
NSString *alert_note_serverOutput = [[NSString alloc] initWithData:alert_note_dataURL encoding:NSASCIIStringEncoding];
if ([alert_note_serverOutput isEqualToString:@"0"]) {
alertImage.hidden = YES;
alertLabel.hidden = YES;
underMainBG.hidden = YES;
alertLabel.text = [NSString stringWithFormat:@"No Alert"];
}else{
alertLabel.text = [NSString stringWithFormat:@"You've Got Note (%@)" ,alert_note_serverOutput];
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能[self checkAlert];每隔x几分钟或几秒钟打电话?
所以以前,在Swift 2.2中我可以使用 Entity.image = UIImagePNGRepresentation(UIImage(named: "Image Name")!)
但现在在Swift 3.0中,似乎我们现在必须使用额外的步骤.Entity.image = NSData(data: UIImagePNGRepresentation(UIImage(named: "Image Name")!))或者相当于的对象UIImage(name: "Image Name")
是否有雨燕3.0一种新的方式,从去UIImage到NSData?
我有一个关于使用AVFoundation的AVPlayer的问题(可能适用于iOS和macOS).我正在尝试播放来自标准HTTP直播流以外的频道的音频(未压缩的wav)数据.
案例:
音频数据包在通道中压缩,同时应用程序需要处理其他数据.例如,视频和音频来自同一个频道,并由标题分隔.
过滤后,我获取音频数据并将其解压缩为WAV格式(此阶段不包含标题).
一旦数据包准备就绪(24k,每个2400字节,立体声16位音频),它们将被传递到AVPlayer的实例(根据Apple的AVAudioPlayer不适合流式传输音频).
鉴于AVPlayer(项目或资产)不从内存加载(没有initWithData:(NSData))并且需要HTTP实时流URL或文件URL,我在磁盘上创建文件(macOS或iOS),添加WAV标题并在那里附加未压缩的数据.
回到AVPlayer,我创建了以下内容:
AVURLAsset *audioAsset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:tempAudioFile] options:nil];
AVPlayerItem *audioItem = [[AVPlayerItem alloc] initWithAsset:audioAsset];
AVPlayer *audioPlayer = [[AVPlayer alloc] initWithPlayerItem:audioItem];
Run Code Online (Sandbox Code Playgroud)
添加KVO然后尝试开始播放:
[audioPlayer play];
Run Code Online (Sandbox Code Playgroud)
结果是音频播放1-2秒然后停止(AVPlayerItemDidPlayToEndTimeNotification准确),同时数据继续附加到文件.由于整个事物处于循环状态,[audioPlayer play]会多次启动和暂停(rate == 0).
整个概念以简化形式:
-(void)PlayAudioWithData:(NSData *data) //data in encoded format
{
NSData *decodedSound = [AudioDecoder DecodeData:data]; //decodes the data from the compressed format (Opus) to WAV
[Player CreateTemporaryFiles]; //This creates the temporary file by appending the header and waiting for input.
[Player SendDataToPlayer:decodedSound]; //this sends …Run Code Online (Sandbox Code Playgroud)