我需要缩放来自iPhone应用程序中视图层的图像的分辨率.显而易见的方法是在UIGraphicsBeginImageContextWithOptions中指定一个比例因子,但是只要比例因子不是1.0,那么图像的质量就会变成底池 - 远远超过像素丢失的预期.
我已经尝试了其他几种缩放技术,但它们似乎都围绕着CGContext的东西而且似乎都做了同样的事情.
简单地改变图像"大小"(不改变点分辨率)是不够的,主要是因为该信息似乎被管道中的其他人很快丢弃(图像将被转换为JPG并通过电子邮件发送).
还有其他方法可以在iPhone上缩放图像吗?
我有一个派生自NSURLConnection的类.奇怪的是,description并dealloc引导到NSURLConnection的(即使实际的数据传输操作成功)时失败.
这是init我班级的方法:
-(id) init {
self = [super init];
NSLog(@"%s -- self description is %@", __PRETTY_FUNCTION__, [self description]);
NSLog(@"%s -- super description is %@", __PRETTY_FUNCTION__, [super description]);
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是执行此代码的日志输出(我description为我的类实现):
2011-08-24 10:41:40.493 SleepyHead[77578:207] -[BinaryExchange init] -- self description is <BinaryExchange>
(gdb) continue
Program received signal: “EXC_BAD_ACCESS”.
Run Code Online (Sandbox Code Playgroud)
发生这种情况时,调试器[super description]在线路上停止,并在调用中停止NSURLConnection description.
到底他妈发生了什么?
(我尝试在此之前分配并不启动该类的另一个副本,因为有可能使用了一块虚假堆,但我仍然遇到同样的失败.)
即使这个序列失败了:
NSURLConnection* dummy = [[NSURLConnection alloc] init];
NSLog(@"%s -- dummy NSURLConnection description is …Run Code Online (Sandbox Code Playgroud) 首先,我已经看到了这一点,但它似乎并不适合我的需求.
我有一个需要稀疏数组的情况.我可以拥有的一些情况,例如3000个可能的条目,只有20个分配,其他情况下我可以分配大部分或全部3000.使用NSMutableDictionary(使用整数索引值的NSString表示)似乎适用于第一种情况,但对于第二种情况,在存储和查找速度方面看起来效率都很低.对于空条目使用带有NSNull对象的NSMutableArray对于第二种情况可以很好地工作,但是对于第一种情况插入大多数3000 NSNull条目似乎有点浪费(并且它可能在UI处产生恼人的延迟).
引用的文章提到使用NSMapTable,因为它应该允许整数键,但显然该类在iPhone上不可用(我不确定我喜欢有一个不保留的对象).
那么,还有另一种选择吗?
我一直在寻找一个嵌入NSMutableSet的自定义类,其中包含一个带有整数(即元素#)和元素指针的自定义类的集合条目,并根据添加/更新/查找来编写模仿NSMutableArray(但是不插入/删除).这似乎是最合理的方法.
我有一个视频源,它使用基于AVPlayer的自定义视频播放器来播放HLS流.在导航栏上,有一个用于启动摄像头的按钮.从iOS 7.0.3更新开始,捕获会话现在遇到SERIOUS问题,它会启动,然后立即自行拆除,发出如下错误:
Capture session error:
NSConcreteNotification 0x146eae70 {name = AVCaptureSessionRuntimeErrorNotification; object = <AVCaptureSession: 0x15976e70 [AVCaptureSessionPresetHigh]>
<AVCaptureDeviceInput: 0x145d3ee0 [Back Camera]> -> <AVCaptureVideoDataOutput: 0x159546f0>
<AVCaptureDeviceInput: 0x1594bd60 [iPhone Microphone]> -> <AVCaptureAudioDataOutput: 0x159823e0>
<AVCaptureDeviceInput: 0x145d3ee0 [Back Camera]> -> <AVCaptureVideoPreviewLayer: 0x1467b370>; userInfo = {
AVCaptureSessionErrorKey = "Error Domain=AVFoundationErrorDomain Code=-11819 \"Cannot Complete Action\" UserInfo=0x146f0ec0 {NSLocalizedRecoverySuggestion=Try again later., NSLocalizedDescription=Cannot Complete Action}";
}}
Run Code Online (Sandbox Code Playgroud)
我设置捕获会话的方法看起来像这样......
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureSessionDidStartRunning:) name:AVCaptureSessionDidStartRunningNotification object:captureSession];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureSessionDidStopRunning:) name:AVCaptureSessionDidStopRunningNotification object:captureSession];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(captureSessionDidFailWithError:) name:AVCaptureSessionRuntimeErrorNotification object:captureSession];
discontinuous = NO;
_recording = NO; …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
NSNumber* interchangeId = dict[@"interchangeMarkerLogId"];
long long llValue = [interchangeId longLongValue];
double dValue = [interchangeId doubleValue];
NSNumber* doubleId = [NSNumber numberWithDouble:dValue];
long long llDouble = [doubleId longLongValue];
if (llValue > 1000000) {
NSLog(@"Have Marker iD = %@, interchangeId = %@, long long value = %lld, doubleNumber = %@, doubleAsLL = %lld, CType = %s, longlong = %s", self.iD, interchangeId, llValue, doubleId, llDouble, [interchangeId objCType], @encode(long long));
}
Run Code Online (Sandbox Code Playgroud)
结果:
标记iD =(null),interchangeId = 635168520811866143,long long value = 635168520811866143,doubleNumber = 6.351685208118661e + 17,doubleAsLL …
我正试图获得两个NSDates之间的时间间隔,即previousActivity.stopTime和previousActivity.startTime.我在这段代码中收到错误:
NSTimeInterval *previousActivityDuration = [previousActivity.stopTime timeIntervalSinceDate:previousActivity.startTime];
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
"Initializing 'NSTimeInterval *' (aka 'double *') with an expression of incompatible type 'NSTimeInterval' (aka 'double')"
我不明白; 如果NSTimeInterval又名'double',初始化表达式如何不兼容,我该如何解决?
非常感谢!
编辑:
根据@Rmaddy的评论,我删除了星号.然后我立即在以下行中收到此错误:
Assigning to 'NSNumber *' from incompatible type 'NSTimeInterval' (aka 'double')
这是违规行:
previousActivity.duration = previousActivityDuration;
Run Code Online (Sandbox Code Playgroud) 我仍然试图在这个令人难以置信(并且不必要)复杂的应用程序中找出一些iOS 5与iOS 4的问题.
我已经追踪一个问题降低到一个事实,即一个控制器(这恰好是调用类的导航控制器)具有一个parentViewController连接前被"发送"一个presentModalViewController请求,但重要的是另一侧(在viewWillAppear的"提出"控制器 - 甚至没有从通话中返回)导航控制器(我已经验证它是相同的地址)突然有一个零parentViewController.
我有理由相信这种行为在iOS 4中没有发生(我一直在两个版本之间来回ping以验证行为).
代码太复杂了,不能包括在这里,但调用是:
[self.navigationController presentModalViewController:messageViewController animated:[self isAnimated]];
Run Code Online (Sandbox Code Playgroud)
在调用之前有断言parentViewController,nav ctlr是非零的,同样在viewWillAppear.断言只是失败了viewWillAppear.
我经常需要在编译时创建一个宽度和高度(让它们是n和m)未知的2D数组,通常我会写:
vector<int> arr(n * m);
Run Code Online (Sandbox Code Playgroud)
我手动访问元素:
arr[j * m + i]
Run Code Online (Sandbox Code Playgroud)
我最近被告知我可以改为写:
int arr[n][m] // n and m still only known at runtime.
Run Code Online (Sandbox Code Playgroud)
所以这里有两个问题:
int (*)[n],但同样,n是动态的,并且在声明它的函数之外不知道(main).有一个(相当复杂)的应用程序在iOS 4上正常工作但在iOS 5上因解密问题而失败.它正在解密SQLite数据库页面,最后16个字节似乎没有被正确解密.
这对任何人都响了吗?
我已经确定,当CCCryptorUpdate的缓冲区长度为1008(1024 - 16)时,它只解密992个字节(如dataOutMoved参数中所报告的那样).如果CCCryptorFinal返回剩余的字节,这将是正常的,但它报告移动了零字节.但是,CCCryptorFinal报告了一个-4304返回代码(这是一个无用的kCCDecodeError).
我已经把它当作彻头彻尾的bug了.我比较了逐字节加密输出和输入到解密,并比较了密钥.相同.但是如果缓冲区长度是1008,那么解密总是会失败,即使解密器被赋予了更大的输出缓冲区(在这种情况下它说它需要1024).我认为它适用于1024,但我没有超过第一个奇怪的大小缓冲区来告诉.
好吧,似乎没有解密.这是使用"多合一" CCCrypt()接口,消除了与CCCryptorCreate /更新/最后的测序错误的机会.我想知道这是AES128的问题吗?
奇怪的是,当数据库的第1页被加密时,加密总是报告比我告诉的更多移动16个字节 - 如果我告诉它1008它报告1024,如果我告诉1024它报告1040.没有其他页面这样做,我不知道CCCrypt如何知道它正在处理什么页面.就像我说的,好奇.
旧代码正在指定kCCOptionPKCS7Padding,据我所知,它只应用于加密缓冲区长度不是块长度的倍数(以及提供额外输出缓冲区空间的位置).这导致几乎所有解密操作都以-4304失败.但是在iOS 4中,操作仍然会移动他们已经解密的数据(基本上是所有这些),而iOS 5改变了,如果操作失败(并且最后一个块几乎总是失败),所有数据移动都被抑制.
关闭填充选项可使代码工作而不会发布任何错误.
我有几个NSStrings,格式类似于下面的格式:
"Hello, how are you?"
Run Code Online (Sandbox Code Playgroud)
如何将字符串分解为一个单词数组?例如,对于上面的句子,我期望一个由...组成的数组"Hello,", "how", "are", "you?"
通常我会通过使用函数将字符串分解为单词 [NSString componentsSeparatedByCharactersInSet: NSCharacterSet set]
然而,这不会在这种情况下工作,因为单词之间的空格是不等长的.注意我不会知道每个单词的大小以及它们之间的空格.
我怎么能做到这一点?我正在为OSX而不是iOS开发应用程序.
编辑:我最终的目标是检索句子中的第二个单词.如果有一个更简单的方法来做到这一点而不将字符串分成数组,请随时提出建议.
ios ×7
objective-c ×5
iphone ×3
ios5 ×2
arrays ×1
avfoundation ×1
c++ ×1
commoncrypto ×1
encryption ×1
image ×1
ios7 ×1
json ×1
macos ×1
nsnumber ×1
parsing ×1
uiimage ×1
uikit ×1
xcode ×1