- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Sprite Kit/iOS 7.0 中处理我自己的 Button 类时遇到了一些问题。一旦我尝试使用“objc_msgSend”回调方法,我就会收到以下错误:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
这是我的 Button 类,其中“标识符”返回给调用者:
// Header File *.h
@property (nonatomic, readwrite, strong) NSString* identifier;
@property (nonatomic, readonly, weak) id targetTouchUpInside;
@property (nonatomic, readonly) SEL actionTouchUpInside;
// Implementation File *.m
// ... this code is in the initializer method
NSMutableString *identifier = [[NSMutableString alloc]init];
[identifier appendFormat:@"%d:%d", menuId, itemId];
[self setIdentifier:[identifier copy]];
// ... this code is called to inform the observer about an event
objc_msgSend(_targetTouchUpInside, _actionTouchUpInside, _identifier);
这是 Button 在检测到触摸时立即调用的回调方法。这是抛出 EXC_BAD_ACCESS 异常的点。 “标识符”为“nil”,但仅在 iPad Air 上有效,有趣的是它在 iPhone 4S 上运行良好。
// ... this is the callback method in the object that instantiates the button object
- (void)itemTouchInside:(NSString*)identifier {
NSLog(@"ID CALLED: %@", identifier);
}
我观察到当我调用“objc_msgSend”时它也适用于 iPad ...
但我需要动态定义 _identifier,如上面的代码片段所示。
知道为什么这适用于 iPhone 而不是 iPad 吗?
最佳答案
我建议您将 objc_msgSend
的使用替换为以下内容:
[self.targetTouchUpInside performSelector:self.actionTouchUpInside withObject:self.identifier];
还要注意属性的使用。你有属性(property),使用它们。
正如其他人所提到的,最好使用copy
而不是strong
来定义identifier
属性。消除了一些可能(且难以发现)的错误。
关于ios - Objective-C:为什么在使用参数调用 objc_msgSend 时会出现 EXC_BAD_ACCESS 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949482/
我需要理清思路才能理解 objc_msgSend()。请慷慨地提供详细答案。 :) 这是我对 Apple Doc 的理解。 When a message is sent to an object, t
假设我在运行时得到一个对象和它的选择器之一,我打算安全地调用它,所以我定义了 #define objc_msgsend_va ((void (*)(id, SEL, ...))objc_msgsend
当我尝试在模拟器(3.1.3,Xcode 3.1.4)上启动我的应用程序时,它显示 objc_msgSend 并且应用程序没有启动。只有当我 alloc NSMUtable Array 时才会发生这种
我在我的应用程序中收到了“objc_msgSend()” fatal error 消息,这要感谢 Hamster Emporium我可以弄清楚发生了什么。 现在我找到了“问题”和“解决方案”,但我不明
我的 iOS 应用程序有一些来自 bugsense 的崩溃报告,但我无法重现,因此无法调试。它一天发生 200 多次,所以我想这很严重。 我读过一些关于 NSZombie 的内容,但我无法重现崩溃,所
当我在应用程序中随机单击按钮时,它会变成这样,没有任何错误或任何异常请给我建议以及如何克服此类错误 提前致谢 最佳答案 为代码中的所有异常设置断点,我们无法使用该信息做任何事情。 如果这没有帮助,只需
在我的项目中,我在右上角添加了一个关闭按钮,如下所示: int closeBtnOffset = 10; UIImage* closeBtnImg = [UIImage imageNamed:@"po
我正在使用 dtrace 打印代码中的所有 objc_msgSend。到目前为止,我可以看到选择器的名称,但无法获得正确的类名。 这是我的 dtrace 脚本: #!/usr/sbin/dtrace
我正在编写一个 objc 桥,我发现了一种使用 objc_msgSend 调用 objc 方法的非常有效的方法。 基本上,代码能够生成一个宏,该宏传递给 objc_msgSend 从 NSArray
我一直在分析我的回合制游戏应用程序,我遇到了一个有趣的(也许)问题。根据下图,objc_msgSend 似乎占用了我的应用程序将近一分钟的运行时间。这是什么,它是否是某些代码编写不当的标志?谢谢! 最
当我有返回一些联合的方法时,我有一个与 objc_msgSend 运行时调用相关的问题。 我正在通过 libffi 调用 objc_msgSend 函数,如果我有小于 16B 的联合,一切都很好,但如
我正在测试我的应用程序,非常努力地插入它,但我让它崩溃了(黑屏,图像无法保存,返回到 springboard)。但是,我没有在控制台中记录任何崩溃报告。当我使用探查器进行测试时,我得到的只是一条消息,
我已经为 iphone 启动了一个基于 2d 图 block 的游戏,我将直接跳转到我的类(class)和问题。我现在总共有 2 个类 Tile 、 Table 和 Base 主类瓦 `@interf
我正在尝试使用 objc_msgSend动态调用某个方法的方法。 假设我想从 A 类调用 B 类中的某个方法,而 B 类中有两个方法,例如: - (void) instanceTestWithStr1
我很惊讶在 stackoverflow 上搜索 j__objc_msgSend 返回 0 个结果,Google 似乎也不太了解它。根据它的 disassembly , j__objc_msgSend
我正在尝试追踪一个错误,我有一个看起来像这样的崩溃日志: 0 libobjc.A.dylib objc_msgSend + 15 1 CoreFoundation __CFRUN
我在 Crashlytics 中遇到如下所示的崩溃。 我无法理解这是应用程序中的什么形式。不幸的是,我自己从未能够生成此崩溃,但它正在发生。 只有一个对应用名称的引用,没有任何内容可以表明它来自应用中
我正在尝试确定 Apple 在 NSWorkspace 上公开的方法在内部如何工作,以便尝试解决该方法的不幸副作用(它写入磁盘,每次调用它)。我可以将 lldb 附加到我的可执行文件并在调用该方法时设
我最近遇到了一个问题,在 Google 上没有可用的解决方案。我想将应用程序的 Objective-C 消息记录到控制台或文件中。我没有编写应用程序,所以我没有源代码来重新编译并包含日志记录。我有一个
当 NSAutoreleasePool 耗尽时,我发生了崩溃。据推测,该池正试图释放一个已被另一段代码过早释放的对象。我遇到的崩溃发生在 objc_msgSend 中,因为它正在尝试向不再存在的对象发
我是一名优秀的程序员,十分优秀!