小编Hot*_*cks的帖子

UIImage的高质量缩放

我需要缩放来自iPhone应用程序中视图层的图像的分辨率.显而易见的方法是在UIGraphicsBeginImageContextWithOptions中指定一个比例因子,但是只要比例因子不是1.0,那么图像的质量就会变成底池 - 远远超过像素丢失的预期.

我已经尝试了其他几种缩放技术,但它们似乎都围绕着CGContext的东西而且似乎都做了同样的事情.

简单地改变图像"大小"(不改变点分辨率)是不够的,主要是因为该信息似乎被管道中的其他人很快丢弃(图像将被转换为JPG并通过电子邮件发送).

还有其他方法可以在iPhone上缩放图像吗?

image uikit uiimage ios

5
推荐指数
2
解决办法
1万
查看次数

NSURLConnection的"描述"失败

我有一个派生自NSURLConnection的类.奇怪的是,descriptiondealloc引导到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)

iphone xcode objective-c ios ios-simulator

5
推荐指数
1
解决办法
381
查看次数

Objective-C稀疏数组redux

首先,我已经看到了这一点,但它似乎并不适合我的需求.

我有一个需要稀疏数组的情况.我可以拥有的一些情况,例如3000个可能的条目,只有20个分配,其他情况下我可以分配大部分或全部3000.使用NSMutableDictionary(使用整数索引值的NSString表示)似乎适用于第一种情况,但对于第二种情况,在存储和查找速度方面看起来效率都很低.对于空条目使用带有NSNull对象的NSMutableArray对于第二种情况可以很好地工作,但是对于第一种情况插入大多数3000 NSNull条目似乎有点浪费(并且它可能在UI处产生恼人的延迟).

引用的文章提到使用NSMapTable,因为它应该允许整数键,但显然该类在iPhone上不可用(我不确定我喜欢有一个不保留的对象).

那么,还有另一种选择吗?

添加9/22

我一直在寻找一个嵌入NSMutableSet的自定义类,其中包含一个带有整数(即元素#)和元素指针的自定义类的集合条目,并根据添加/更新/查找来编写模仿NSMutableArray(但是不插入/删除).这似乎是最合理的方法.

iphone objective-c ios

5
推荐指数
1
解决办法
1170
查看次数

AVCaptureSession启动然后立即失败

我有一个视频源,它使用基于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)

avfoundation ios avcapturesession ios7

5
推荐指数
1
解决办法
1835
查看次数

如何确定NSNumber的真实数据类型?

考虑以下代码:

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 …

json objective-c nsnumber ios

5
推荐指数
1
解决办法
5265
查看次数

iOS错误"初始化'NSTimeInterval*'(又名'double*')

我正试图获得两个NSDates之间的时间间隔,即previousActivity.stopTimepreviousActivity.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)

nstimeinterval ios

5
推荐指数
1
解决办法
4223
查看次数

iOS 5 - presentModalViewController在"self"中nils parentViewController?

我仍然试图在这个令人难以置信(并且不必要)复杂的应用程序中找出一些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.

iphone objective-c ios5

4
推荐指数
1
解决办法
3015
查看次数

int [n] [m],其中n和m在运行时是已知的

我经常需要在编译时创建一个宽度和高度(让它们是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)

所以这里有两个问题:

  1. C++标准是否允许这种行为?
  2. 我应该如何将这样的数组传递给函数?g ++报告arr具有类型int (*)[n],但同样,n是动态的,并且在声明它的函数之外不知道(main).

c++ arrays multidimensional-array dynamic-arrays

4
推荐指数
1
解决办法
9003
查看次数

其他人在使用iOS 5加密时遇到问题?

有一个(相当复杂)的应用程序在iOS 4上正常工作但在iOS 5上因解密问题而失败.它正在解密SQLite数据库页面,最后16个字节似乎没有被正确解密.

这对任何人都响了吗?

更新

我已经确定,当CCCryptorUpdate的缓冲区长度为1008(1024 - 16)时,它只解密992个字节(如dataOutMoved参数中所报告的那样).如果CCCryptorFinal返回剩余的字节,这将是正常的,但它报告移动了零字节.但是,CCCryptorFinal报告了一个-4304返回代码(这是一个无用的kCCDecodeError).

更新2

我已经把它当作彻头彻尾的bug了.我比较了逐字节加密输出和输入到解密,并比较了密钥.相同.但是如果缓冲区长度是1008,那么解密总是会失败,即使解密器被赋予了更大的输出缓冲区(在这种情况下它说它需要1024).我认为它适用于1024,但我没有超过第一个奇怪的大小缓冲区来告诉.

等等

好吧,似乎没有解密.这是使用"多合一" CCCrypt()接口,消除了与CCCryptorCreate /更新/最后的测序错误的机会.我想知道这是AES128的问题吗?

奇怪的是,当数据库的第1页被加密时,加密总是报告比我告诉的更多移动16个字节 - 如果我告诉它1008它报告1024,如果我告诉1024它报告1040.没有其他页面这样做,我不知道CCCrypt如何知道它正在处理什么页面.就像我说的,好奇.

发现它(我认为)

旧代码正在指定kCCOptionPKCS7Padding,据我所知,它只应用于加密缓冲区长度不是块长度的倍数(以及提供额外输出缓冲区空间的位置).这导致几乎所有解密操作都以-4304失败.但是在iOS 4中,操作仍然会移动他们已经解密的数据(基本上是所有这些),而iOS 5改变了,如果操作失败(并且最后一个块几乎总是失败),所有数据移动都被抑制.

关闭填充选项可使代码工作而不会发布任何错误.

encryption ios ios5 commoncrypto

3
推荐指数
1
解决办法
1620
查看次数

如何将NSString分解为具有非显着空白抑制的单词?

我有几个NSStrings,格式类似于下面的格式:

"Hello, how       are   you?"
Run Code Online (Sandbox Code Playgroud)

如何将字符串分解为一个单词数组?例如,对于上面的句子,我期望一个由...组成的数组"Hello,", "how", "are", "you?"

通常我会通过使用函数将字符串分解为单词 [NSString componentsSeparatedByCharactersInSet: NSCharacterSet set]

然而,这不会在这种情况下工作,因为单词之间的空格是不等长的.注意我不会知道每个单词的大小以及它们之间的空格.

我怎么能做到这一点?我正在为OSX而不是iOS开发应用程序.

编辑:我最终的目标是检索句子中的第二个单词.如果有一个更简单的方法来做到这一点而不将字符串分成数组,请随时提出建议.

macos parsing objective-c

3
推荐指数
1
解决办法
1795
查看次数