- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 iPad 应用程序,是几年前使用 Greg Coombs 编写的 IntelligentSplitViewController它允许人们生成类似于 iPhone 应用程序中可旋转的 UITabBarController 的布局。最近发布的 iOS 10 以一种方式打破了这一点 previously been described对于此列表中的早期版本: objc_msgSend 给出一条错误消息:参数数量有限,而预期为 0。
@rintaro 对此的回答是执行类型转换到另一个方法 (typed_msgSend) 以代替 objc_msgSend。为了响应其他发帖者的带有两个参数的代码,这是:
id (*typed_msgSend)(id, SEL) = (void *)objc_msgSend;
Greg 的代码稍微复杂一些,考虑到我在 Objective-C 方面的弱点,我很难做与他的代码类似的事情。 (不幸的是,格雷格生病了,并不再支持这一点。)详细信息如下:
- (void)willRotate:(NSNotification*)notification
{
...
if (UIInterfaceOrientationIsPortrait(toOrientation))
{
@try
{
UIPopoverController *popover = [super valueForKey:@"_hiddenPopoverController"];
objc_msgSend(theDelegate, @selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:), self, master, button, popover);
...
所以问题是六个参数的数据类型是什么?我的尝试是:
这会构建,但在启动画面后会在 main 中崩溃。当然,它可能会因为其他原因而崩溃,但除非我确定我的类型转换是正确的,否则我无法知道。 (我多么希望这是 Java。)
最佳答案
void (*my_objc_msgSend)(id, SEL, id, id, id, id) = (__typeof(my_objc_msgSend))objc_msgSend;
my_objc_msgSend(theDelegate, @selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:), self, master, button, popover);
在objc中,id
是struct的一个点。任何对象(从 NSObject
继承的类)都可以使用 id
代替。
如果仍然崩溃,请发布日志。
在 iOS 9 之后,splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
已弃用,您应该改用 splitViewController:willChangeToDisplayMode:
。
关于ios - 用于转换以修复 objc_msgSend 错误数量的参数错误的 self 类型和委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663295/
我需要理清思路才能理解 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 中,因为它正在尝试向不再存在的对象发
我是一名优秀的程序员,十分优秀!