Xamarin.iOS unrecognized selector sent to class

Xamarin.iOS unrecognized selector sent to class

一、问题

在尝试绑定百度推送iOS的SDK时,遇到unrecognized selector sent to class这个问题导致app崩溃。

关于这个问题,网上一搜一大堆,这里还是贴一篇帖子吧 Other Linker Flags

二、原生iOS中解决方法

遇到这个问题的解决办法有三个:
是在Other Linker Flags里加上所需的参数添加某一个文件的链接库,用到的参数一般有以下3个:

1. -ObjC

这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

2. -all_load

这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。

3. -force_load

这个flag所做的事情跟-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载 ,-force_load在xcode3.2后可用。

三、Xamarin.iOS中解决方法

那么在Xamarin.iOS 绑定中怎么解决这个问题呢?

以百度推送为例:libBPush.a

将文件添加到绑定项目中时,Xamarin 会自动将该文件的生成操作设置为ObjcBindingNativeLibrary,并创建一个名为 libBPush.linkwith.cs的特殊文件。
其代码如下:


using ObjCRuntime;

[assembly: LinkWith ("libBPush.a", SmartLink = true, ForceLoad = true]

我们需要做如下修改:在LinkWith中添加 LinkerFlags = "-ObjC" 这么一句


using ObjCRuntime;

[assembly: LinkWith ("libBPush.a", SmartLink = true, ForceLoad = true , LinkerFlags = "-ObjC")]

这样即可解决百度推送绑定的问题,当然具体问题具体分析啦。

原文地址:https://www.cnblogs.com/devin_zhou/p/11994086.html

时间: 2024-12-17 22:36:20

Xamarin.iOS unrecognized selector sent to class的相关文章

Unrecognized Selector Sent to Instance问题之诱敌深入关门打狗解决办法

? MAY 17TH, 2014 前不久在微博上看到一篇文章,<UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法>?其中讲了iOS unrecognized selector sent to instance问题的快速定位方法,方法是不错的,但是实际测试发现文中的方法并非万能,从我自身的经历以及文中的评论看都有不能解决的情况. 出现unrecognized selector sent to instance问题,大部分是因为对象被提前释放,指针变

ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0&#39;报错

今天接口由get换成post,我去改进行登录但出现了这个错误,首先出错先看能不能与服务器交互,能不能获得数据,其次,获得的数据是不是你想要的,记住,首先出错要想到是自己的问题,还有就是程序崩了要学会自己解决,打断点找原因,一步步跟,看是哪里出了问题 我这个问题一看就是拿了NSCFNumber类型和NSString类型做了比较,由于不会响应isEqualToString方法而报错,所以只要转换一下就可以了 NSString *factory_id = [NSString stringWithFor

iOS开发笔记--[__NSArrayI addObjectsFromArray:]: unrecognized selector错误

操作NSMutableArray数字增加和删除时候出现崩溃,报错[__NSArrayI addObjectsFromArray:]: unrecognized selector. 找了一个小时,发“__NSArrayI”这个提示比较重要.查了一下发现 __NSArrayI is a code-word for an immutable array - that is, a "regular" NSArray which you cannot change. __NSArrayM is

iOS 程序报错:reason: [NSArrayI addObject:]: unrecognized selector sent to instance

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x4b17be0' 错误:NSArray 不能使用 addObject:方法.可能是在程序运行的过程中,NSMutableArray转为了NSArray. 解决方案:核查数组,看看是否在NSArra

iOS中的crash防护(一)unrecognized selector sent to instance

专栏开篇: 在开发的过程中,作开为发者我们经常会遇到崩溃,闪退的情况,而且崩溃,闪退的情况有很多种.如果是在开发测试过程中的话,我们可以及时进行分析修复,但是对于我们的KPI还是会一有定的影响的,给导领留下的印象不佳.而且定位crash仍然需要花费很多的时间.如果崩溃,闪退发生在线上,那么对我们公司的产品影响更大,对我们的影响也是大的不行,轻则挨骂,重则扣工资.而且线上crash难以追踪定位,相信大家都深有体会.如果有一种机制,能够将常见的大多数crash给屏掉蔽,不会crash,而且可以发送c

IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance

那在什么场景中会出现这种情况呢? 如果一个包含文字的输入元素有焦点,然后按钮的点击会导致输入失去焦点,然后接下来在输入时双按会重新得到焦点并从弹出bar中选择剪切复制粘贴,就会导致此error. 也就是说当WebView页面中的HTML中有如下代码的时候 <input type="text"> <input type="button" > 即有输入框和按钮的时候,会出现 [UIWebView cut:]: unrecognized selec

iOS开发&mdash;&mdash;异常:[__NSCFNumber length]: unrecognized selector sent to instance

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance   网上参考的他人案例,与我的情况一模一样,所以直接盗用他的图和文章了. http://www.tuicool.com/articles/EZ3uMb7         这个错误是作者解析pilst文

MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决

最近的工作需要将工程打包成静态库文件,然后提供给别人使用.在工程中有引用第三方类库MBProgressHUD,在打包出静态库文件后,写了个Demo,引用了其中的一段代码来显示MBProgressHUD,在iOS 7模拟器中无错运行. 来到真机测试,在iOS 7的设备上无压力通过.但是在iOS 6的设备上显示MBProgressHUD时却崩溃了,错误提示为: -[__NSCFString sizeWithAttributes:]: unrecognized selector sent to XXX

unrecognized selector sent to instance

[iOS] Error Fixed : [__NSArrayI addObject:]: unrecognized selector sent to instance 当我创建了一个NSMutableArray 对象的时候 @property (nonatomic,copy)NSMutableArray *children; 然后通过addObject运行就会报错,[__NSArrayI addObject:]: unrecognized selector sent to instance 解决