0

我有一个应用程序自一年多前推出以来一直运行良好。

我最初使用 iphone iOS 2.2.1 开发它并测试并一直销售它直到 3.2 没有问题。

现在它无法与 iOS4 一起启动。

该应用程序对 UIPickerView 使用了非标准大小(我认为这不是问题,但只需提及它,因为您会在控制台输出中看到一些抱怨)。它还给出了以前未报告的NSAutoreleasePool警告。

但罪魁祸首似乎是在将界面调整为新的 iphone 屏幕分辨率时(至少我从控制台得到的)

我知道我必须自己做一些研究,但 iOS4 推出的时间太少了,我非常专注于学习和开发我的第一个 android 应用程序(所以我没有测试这个特定的代码,一年后这个应用程序只卖一天几份),我认为在这里询问是否有人有一些信息或已经遇到过它并没有害处。

首先,这是使用 XCODE 3.2.3 和 BASE SDK 3.2 构建和运行时的控制台输出,运行没有问题

2010-06-22 23:25:55.619 metalandmaterials[82956:207] ******* 可访问性状态已更改:2010-06-22 23:25:55.710 metalandmaterials[82956:207] ****** **** 正在加载 AX:xxxxxxxxx

但是尝试使用 iOS4 运行它会带来这种美感:

2010-06-22 23:15:52.488 metalandmaterials[80149:207] ******* 可访问性状态已更改:
2010-06-22 23:15:52.546 metalandmaterials[80149:207] ****** **** 正在加载 AX:XXXXXXX ************
2010-06-22 23:15:53.003 metalandmaterials[80149:207] * -[NSAutoreleasePool release]: 这个池已经被释放,不要排干它(双释放)。
2010-06-22 23:15:53.005 metalandmaterials[80149:207] *
-[NSAutoreleasePool release]:这个池已经被释放,不要排空它(双释放)。
2010-06-22 23:15:53.008 金属和材料[80149:207]-[UIPickerView setFrame:]:无效高度值 50.0 固定到 162.0

就在这儿![UIIageView 比例]

2010-06-22 23:15:53.011 metalandmaterials[80149:207]-[UIImageView scale]:无法识别的选择器发送到实例 0x5ac47a0
2010-06-22 23:15:53.013 metalandmaterials[80149:207] *** 应用程序到期终止未捕获的异常 'NSInvalidArgumentException',原因:'-[UIImageView scale]: unrecognized selector sent to instance 0x5ac47a0'

在第一掷调用堆栈:

0的CoreFoundation 0x025f5919 exceptionPreprocess + 185
1周libobjc.A.dylib 0x027435de objc_exception_throw + 47
2的CoreFoundation 0x025f742b - [NSObject的(NSObject的)doesNotRecognizeSelector:] + 187
3的CoreFoundation 0x02567116 ___forwarding_
+ 966
4的CoreFoundation 0x02566cd2 _CF_forwarding_prep_0 + 50
5 UIKit 0x0039a8e3 -[UIImageView setImage:] + 250
6 UIKit 0x0039b63e -[UIImageView initWithImage:] + 161
7 UIKit的0x05f286ce - [UIImageViewAccessibility(SafeCategory)initWithImage:] + 70个
8 metalsandmaterials 0x0000bf09 - [TVCResults INIT] + 1841
9个metalsandmaterials 0x00002b8c - [UIVCalcHolder INIT] + 258
个10 metalsandmaterials 0x00002758 - [CalcTestAppDelegate的applicationDidFinishLaunching:] + 649
11的UIKit 0x002d759c - [ UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1252
12 UIKit 0x002d99a1 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346
13 UIKit的0x002e3452 - [UIApplication的的handleEvent:withNewEvent:] + 1958
14的UIKit 0x002dc074 - [UIApplication的的SendEvent:] + 71
15的UIKit 0x002e0ac4 _UIApplicationHandleEvent + 7495
16个GraphicsServices 0x02de1afa PurpleEventCallback + 1578
17的CoreFoundation 0x025d6dc4 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52
18的CoreFoundation 0x02537737 __CFRunLoopDoSource1 + 215
19的CoreFoundation 0x025349c3 __CFRunLoopRun + 979
20 Corefoundation 0x02534280 Cfrunlooprun特价+ 208
21 Corefoundation 0x025341A1 CfrunloopruninMode + 97
22 uikit 0x002d9226 - [Uiapplication _run] + 625
23 uikit 0x002e4b58 Uiapplicationmain + 1160
24 metalsandmaterial 0x000024ac Main + 230
25 metalsandmaterial 0x000023bd start + 53
26 ??? 0x00000001 0x0 + 1
) 在抛出“NSException”实例后调用终止
程序接收到的信号:“SIGABRT”。
杀杀
_

那么这个scale方法对uiimageview来说是新的吗?为什么它不起作用?有没有人遇到过这个?

非常感谢任何帮助

最好的问候
大卫

4

4 回答 4

3

通常当一个对象已被释放但您仍在尝试使用它时,您会收到一条消息“xxxxxx 无法识别选择器 yyyyyy”。那时因为内存是随机的,系统认为它是其他随机类型的对象(如 UIImage)。因此,这是一条红鲱鱼,表明其他事情是错误的,并且您正在过度释放对象。

除非您使用自定义自动释放池做某事,否则您无法收到那些奇怪的自动释放消息。坦白说,你在代码中使用 NSAutoreleasePool 做什么?

我认为它们可能与“不识别选择器”消息有关,因为您可能因此而过度释放事物。

于 2010-06-23T06:09:51.830 回答
0

好吧,对于 NSAutoreleasePool 的第一个问题,我会使用工具,以便您可以追踪额外的排放/释放来自何处。

您的第二个问题 doesNotRecognizeSelector 告诉您正在调用的选择器不存在(或丢失范围)。我会使用调试器,这样您就可以再次跟踪该代码的执行情况。

于 2010-06-23T04:29:03.160 回答
0

好的,如果向 UIImageView 的子类添加 -(void)scale 并使用这个新类,我就离开了。测试它,在 2.2.1、3.2 和 ios4 上运行良好,在模拟器、iphone touch 3g 和 ios4 和 ipad 和 ios3.2 上都可以正常工作。

我仍然需要一个 iphone4 并查看是否遇到了一些奇怪的布局问题(我仍然相信当操作系统想要将东西炸毁到新的视网膜显示器时出现问题)。

不过,不在美国会有点困难

于 2010-06-25T22:57:14.150 回答
0

我可以是您在某个地方将 imageView 的图像属性设置为另一个 UIImageView(而不是 UIImage)吗?

毕竟 UIImageView 不会响应 :scale,但 UIImage 会。

于 2011-04-07T18:09:37.273 回答