日期:2014-05-20  浏览次数:20735 次

PhoneGap0.9.6的Connecton插件与MessageUI.framework中的Connection冲突

PhoneGap0.9.6的Connecton插件与MessageUI.framework中的Connection冲突

?

对一个运行正常的项目加入MessageUI.framework后,项目刚刚开始运行就Crash了。

?

原因分析:

分析后发现是因为MessageUI.framework中的Connection类与PhoneGap0.9.6中的Connection插件冲突了,因为PhoneGap的插件的实例化类似于用了反射机制,在PhoneGapDelegate里实例化PhoneGap自己的Connection ObjectiveC类的时候是用MessageUI.framework中的Connecton类,但是在PhoneGapDelegate里还会调用initWithWebView方法,而MessageUI.framework中的Connecton类却没有这个方法,所以会Crash。

?

解析方法:

方法1)升级PhoneGap到1.0及其以后。这个方法没有试过,据说可以。

?

方法2)把PhoneGap0.9.6源码中的Connection插件ObjectiveC类名改个名字,如PGConnection,同时把其它引用这个类名地方也改过来。再把项目中引用的PhoneGap0.9.6.js和PhoneGap0.9.6.min.js文件中Connection类改为PGConnection。把PhoneGap.plist文件中之前插件部分的Connection的key和value都改为PGConnection。最后,不要忘了一个地方,在PhoneGapDelegate中379行左右“id cmd = [self getCommandInstance:@"Connection"];”改为“id cmd = [self getCommandInstance:@"PGConnection"];”。

?

OK,这样于运行项目就万事大吉了,而且又不影响MessageUI.framework和PhoneGap0.9.6各自的Connection类的功能使用。