所有这些看起来都太微不足道了,但通过 -
阅读我有简单的班级(A)和超级班级(B)。我在两者上都有init方法(A的指定初始化程序initWithData和B的常规(id)init)。我在super(B)上定义了一个委托,由[instanceofA setDelegate:self]调用。当然,我有以下代码行 - @interface A:B { //declarations }
因此,当我在iphone模拟器(Ver 3.2)上运行我的应用程序时,调用设置委托运行失败并显示消息“ - [setDelegate:]:无法识别的选择器发送到实例0x4c59e10”因此应用程序崩溃
当我调试我的应用程序时,A的初始化程序中的[super init]调用不会调用它的超级即B(即使我在B的init方法中保留了调试指针)
如果我在iPod上运行应用程序(SDK 3.1.3),所有这一切都可以正常工作 - 即使调试点被点击
由于某种原因,在运行时,模拟器无法找到A类的超类B。
我已经尝试在我的iPhone模拟器上重置“内容和设置”但是徒劳无功。我也尝试了多次重建,标记了我所有的课程“感动”。什么都行不通。这是清洁现有目标的问题吗?我们如何在XCODE中清理目标?
我不确定这里是否有相关但略有相似的问题 - [http://stackoverflow.com/questions/3706068/app-crashes-on-simulator-works-on-iphone-device] [1]
更新!
我知道问题 - 请忽略上面的所有超级内容。问题在于此消息(在我的调试器控制台上预先显示 - 但不是警告) -
objc [34514]:类连接在/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/System/Library/PrivateFrameworks/Message.framework/Message和/ Users / admin1 /中实现库/应用程序支持/ iPhone模拟器/ 3.1.3 / Applications / xxxyyyyzzzzbbbbb / MyApp.app / MyApp。将使用两者之一。哪一个未定义。
所以我删除“messageUI.framework”并删除我在我的代码中对它的所有引用,如MFMailComposeViewController,canSendMail等等,一切都恢复正常。我应该知道,这是我最后一组实现。我并没有真正进行任何单元测试,因此当我开始测试我的应用程序时没有意识到这一点。
我用Google搜索并追踪到以下网址 - groups.google.com/group/objectiveresource/tree/browse_frm/month/2009-07/d8b3f3664c39785b?rnum=1&_done=%2Fgroup%2Fobjectiveresource%2Fbrowse_frm%2Fmonth%2F2009 -07%3F
链接到 - groups.google.com/group/objectiveresource/browse_thread/thread/349756a5e01eb8b1/8712f5fde9e9b47c?lnk=gst&q=prefix#8712f5fde9e9b47c
目标C的类名相关指南是什么?谈论如何避免类名冲突的任何在线资源(苹果/非苹果)?现在我将试图弄清楚我的哪一类导致了这场冲突......
答案 0 :(得分:0)
这是我班级中名为“连接”的班级,也是在messageUI.framework中。我应该更仔细地阅读内容!!
总是在我面前回答!!我想它总是......
答案 1 :(得分:0)
在回答您修改过的问题时,Objective-C缺少命名空间,这就是为什么您会看到像您的案例中发生的事情一样的冲突。这就是为什么在自定义类名之前使用两个或三个字母前缀的惯例(例如SBHConnection会在你的情况下避免这个问题)。
有关此问题的详细讨论,请参阅问题“What is the best way to solve an Objective-C namespace collision?”,尽管这会转向更多技术领域。请参阅Scott Stevenson的Cocoa Style for Objective-C,了解一些在Cocoa和Cocoa Touch应用程序中常见的样式元素的实用解释。