【问题标题】:EXC_BAD_ACCESS (code=1) on iPad 2, iPhone4S and iPhone5 onlyEXC_BAD_ACCESS (code=1) 仅适用于 iPad 2、iPhone4S 和 iPhone5
【发布时间】:2016-03-06 16:08:40
【问题描述】:

这一直困扰着我一上午,我已经在这个网站上搜索了地狱,我找不到任何关于这个问题的参考。

在我的项目中,我有 2 个具有循环依赖关系的对象,就像这样设置的;

ClassA.h

@class ClassB;

@interface ClassA : NSObject {
    ClassB *foo;
}
@end

ClassA.m

#import "ClassB.h"

@implementation ClassA
    // Whatever goes here
@end

ClassB.h

@class ClassA;

@interface ClassB : NSObject {
    ClassA *foo;
}

@end

ClassB.m

#import "ClassA.h"

@implementation ClassB
    // Whatever goes here
@end

(信用 - Does Objective-C allow circular dependencies?

我已经在几个项目中使用了这种技术,到目前为止它工作得非常好,每个对象都能够完美地访问彼此的属性。

几天前,我在 ClassA 中添加了一些方法,并尝试从 ClassB 调用它们,这再次完全正常......所以我想,问题是我一直在使用各种操作系统版本的 iPhone 上进行测试在他们身上,但他们都是iPhone5S及以上。今天我在 iPad2 模拟器上运行了这个项目,运行 SOME OF 方法时它崩溃了,iPhone4S 和 iPhone5 模拟器也是如此。

例如,我在 ClassA 中的方法只是简单的设置器;

-(void)setHomeButtonPageContents:(NSString*)contents Index:(int)index
{
    homeButtonPageContents[index]=contents;
}

它们都是上述的变体,一些设置颜色一些设置字体,但在较旧的设备(iPad2、iPhone4S 和 iPhone5)上有些工作有些不工作。

有什么想法吗?!?!

【问题讨论】:

  • 堆栈跟踪是什么?它在哪里崩溃? homeButtonPageContents 是如何定义的?您是否有任何限定符(弱、强等)或属性或实例变量?一切都在同一个线程上运行吗?你没有给我们太多的工作......
  • 是的,一切都在同一个踏板上运行。 NSString *homeButtonPageContents[9]; - 这是在 ClassA 中定义的实例变量,当从 ClassA 调用原始线程中的方法时会发生崩溃。这在 64 位设备上运行良好,但任何更低的设备都行不通
  • NSString *homeButtonPageContents[9]?这是 Objective-C 中非常不寻常的模式,老实说,我不确定它是否真的得到正确支持,尤其是 ARC。它也不提供任何范围检查(你自己也没有检查)。使用NSMutableArray。并检查您的索引值,实际的错误可能在其他地方......

标签: ios xcode inheritance exc-bad-access circular-dependency


【解决方案1】:

是否所有设备都运行相同版本的 iOS?可能是在这些较旧的设备上,您没有可以处理您正在调用的方法的 iOS 版本。

【讨论】:

  • 嗨,我检查了几个不同版本的 iOS,这肯定取决于设备类型,而不是操作系统。我也在模拟器上尝试了所有不同的设备,只有 iPad2、iPhone 4S 和 iPhone5 受到影响。
  • 设备类型之间还有其他差异。例如,旧设备不是 64 位的。如果您在较新的设备上使用 NSInteger,然后假设在较旧的设备上 NSInteger 的大小相同,那么您将遇到问题。 iPhone 5s 是 64 位设备。
  • 我从来不知道,谢谢,这无疑给了我一个新的研究领域。如果我发现任何有用的东西,我会在这里发布,但就目前而言,我的代码仍然很糟糕(无论如何对于旧设备):)
  • 我在两种情况下遇到了这种情况: 1. 我从一台设备获取索引号并将它们传递给另一台设备上的 UITableView。一个设备是 64 位,另一个是 32 位。我假设 NSIntegers 是 4 个字节,而一个或另一个设备的行为会不正确,因为有时我需要处理 8 个字节。 2. 单个 RGB 的 UIColor 值是 CGFloat,在 32/64 位下有不同的大小。
  • 我想你可能会在那里,我传递的索引是一个简单的整数,我会在短时间内做一些测试,让你知道你是否正确,我有一个感觉你是!
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多