Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin仅在设备上丢失了自定义objc类别(无法识别的选择器发送到实例)_C#_Ios_Xamarin_Xamarin.ios - Fatal编程技术网

C# Xamarin仅在设备上丢失了自定义objc类别(无法识别的选择器发送到实例)

C# Xamarin仅在设备上丢失了自定义objc类别(无法识别的选择器发送到实例),c#,ios,xamarin,xamarin.ios,C#,Ios,Xamarin,Xamarin.ios,情况: 我在objc静态库中定义了一个自定义类别: @implementation UIViewController (Colorful) -(void)changeColor:(UIColor *)color { self.view.backgroundColor = color; } @end 它绑定到Xamarin项目: [Category, BaseType(typeof(UIViewController))] interface UIViewController_Colo

情况:

  • 我在objc静态库中定义了一个自定义类别:

    @implementation UIViewController (Colorful)
    -(void)changeColor:(UIColor *)color
    {
        self.view.backgroundColor = color;
    }
    @end
    
  • 它绑定到Xamarin项目:

    [Category, BaseType(typeof(UIViewController))]
    interface UIViewController_Colorful
    {
        [Export ("changeColor:")]
        void ChangeColor(UIColor color);
    }
    
  • 此类别用于以下代码:

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        window = new UIWindow (UIScreen.MainScreen.Bounds);
    
        UIViewController vc = new UIViewController ();
        vc.ChangeColor (UIColor.Red);
        window.RootViewController = vc;
    
        window.MakeKeyAndVisible ();
    
        return true;
    }
    
它在模拟器上运行良好,但在设备上我得到以下异常。即使在库本身内部调用category,也会出现同样的情况

我的设置是OS X 10.10、Xcode 6.3、Xamarin studio 5.9.3、Xamarin.iOS 8.10.1.64、Mono 4.0.1

谢谢

$exception  {Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[UIViewController changeColor:]: unrecognized selector sent to instance 0x1759cd70
   at ObjCRuntime.Runtime.ThrowNSException (IntPtr ns_exception) [0x00000] in /Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/ObjCRuntime/Runtime.cs:167
   at ObjCRuntime.Runtime.throw_ns_exception (IntPtr exc) [0x00000] in <filename unknown>:0    
   at (wrapper native-to-managed) ObjCRuntime.Runtime:throw_ns_exception (intptr)   
   at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)   
   at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/UIKit/UIApplication.cs:63    at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/UIKit/UIApplication.cs:46    
   at XTestApp.Application.Main (System.String[] args) [0x00008] in /Volumes/MacWork/xamarin/BindingTest/xamarin/XTest/XTestApp/Main.cs:17  

   NSInvalidArgumentException: -[UIViewController changeColor:]: unrecognized selector sent to instance 0x1759cd70  
   0   CoreFoundation                      0x264de007 <redacted> + 150  
   1   libobjc.A.dylib                     0x3478dc8b objc_exception_throw + 38     
   2   CoreFoundation                      0x264e3409 <redacted> + 0    
   3   CoreFoundation                      0x264e1327 <redacted> + 714  
   4   CoreFoundation                      0x26410e78 _CF_forwarding_prep_0 + 24    
   5   XTestApp                            0x0026e21c wrapper_managed_to_native_ApiDefinition_Messaging_void_objc_msgSend_IntPtr_intptr_intptr_intptr + 228     
   6   XTestApp                            0x0026d4c0 Binding_UIViewController_Colorful_ChangeColor_UIKit_UIViewController_UIKit_UIColor + 432  
   7   XTestApp                            0x000c8424 XTestApp_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 592  
   8   XTestApp                            0x0022c4d8 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 224    
   9   XTestApp                            0x0029d933 mono_jit_runtime_invoke + 1190    
   10  XTestApp                            0x002da025 mono_runtime_invoke + 88  
   11  XTestApp                            0x0026e605 native_to_managed_trampoline_1 + 420  
   12  XTestApp                            0x0026ea31 -[AppDelegate application:didFinishLaunchingWithOptions:] + 100   
   13  UIKit                               0x29b9e293 <redacted> + 374  
   14  UIKit                               0x29d94b29 <redacted> + 2444     
   15  UIKit                               0x29d971e9 <redacted> + 1412     
   16  UIKit                               0x29da1e69 <redacted> + 36   
   17  UIKit                               0x29d9598b <redacted> + 130  
   18  FrontBoardServices                  0x2cf95ec9 <redacted> + 16   
   19  CoreFoundation                      0x264a3fd5 <redacted> + 12   
   20  CoreFoundation                      0x264a3299 <redacted> + 216  
   21  CoreFoundation                      0x264a1dd3 <redacted> + 1714     
   22  CoreFoundation                      0x263ee201 CFRunLoopRunSpecific + 476    
   23  CoreFoundation                      0x263ee013 CFRunLoopRunInMode + 106  
   24  UIKit                               0x29b97e67 <redacted> + 558  
   25  UIKit                               0x29b92a59 UIApplicationMain + 1440  
   26  XTestApp                            0x0010710c wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 272  
   27  XTestApp                            0x000e56dc UIKit_UIApplication_Main_string___intptr_intptr + 52  
   28  XTestApp                            0x000e569c UIKit_UIApplication_Main_string___string_string + 204     
   29  XTestApp                            0x000c8130 XTestApp_Application_Main_string__ + 172  
   30  XTestApp                            0x0022c4d8 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 224    
   31  XTestApp                            0x0029d933 mono_jit_runtime_invoke + 1190    
   32  XTestApp                            0x002da025 mono_runtime_invoke + 88  
   33  XTestApp                            0x002dd4c7 mono_runtime_exec_main + 282  
   34  XTestApp                            0x002dd309 mono_runtime_run_main + 476   
   35  XTestApp                            0x0028c5d9 mono_jit_exec + 48    
   36  XTestApp                            0x0032d3ec xamarin_main + 2184   
   37  XTestApp                            0x0026f4dd main + 112    
   38  libdyld.dylib                       0x34d19aaf <redacted> + 2 }  Foundation.MonoTouchException
$exception{Foundation.MonoTouchException:Objective-C异常引发。名称:NSInvalidArgumentException原因:-[UIViewController changeColor:]:发送到实例0x1759cd70的选择器无法识别
在/Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/ObjCRuntime/Runtime.cs:167中的ObjCRuntime.Runtime.ThrowNSException(IntPtr ns_异常)[0x00000]中
在ObjCRuntime.Runtime.throw_ns_异常(IntPtr exc)[0x00000]中:0
at(包装器本机到托管)ObjCRuntime.Runtime:throw_ns_异常(intptr)
在(包装器管理为本机)UIKit.UIApplication:UIApplicationMain(int,string[],intptr,intptr)
在/Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/UIKit/UIApplication.Main(System.String[]args,IntPtr principal,IntPtr delegate)中的UIKit.UIApplication.Main(System.String[]args,System.String principalClassName,System.String delegateClassName)[0x0001c]处的UIKit.UIKit.UIKit.UIApplication.cs:63在/Users/builder/data/lanes/1503/e6ebd18b/source/maccore/src/UIKit/UIApplication.cs:46中
在/Volumes/MacWork/xamarin/BindingTest/xamarin/XTest/XTest/XTestApp/Main.cs:17中的XTestApp.Application.Main(System.String[]args)[0x00008]
NSInvalidArgumentException:-[UIViewController changeColor:]:发送到实例0x1759cd70的选择器无法识别
0 CoreFoundation 0x264de007+150
1 libobjc.A.dylib 0x3478dc8b objc_异常_抛出+38
2 CoreFoundation 0x264e3409+0
3芯基础0x264e1327+714
4 CoreFoundation 0x26410e78\u CF\u转发\u准备\u 0+24
5 XTestApp 0x0026e21c包装器\u托管\u到\u本机\u ApiDefinition\u消息传递\u无效\u对象jc\u msgSend\u IntPtr\u IntPtr\u IntPtr+228
6 XTestApp 0x0026d4c0绑定\u UIViewController\u CHANGECLOR\u UIKit\u UIViewController\u UIKit\u UIColor+432
7 XTestApp 0x000c8424 XTestApp_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary+592
8 XTestApp 0x0022c4d8包装器\u运行时\u调用\u对象\u运行时\u调用\u动态\u intptr\u intptr\u intptr\u intptr+224
9 XTestApp 0x0029d933单声道jit运行时调用+1190
10 XTestApp 0x002da025单声道运行时调用+88
11 XTestApp 0x0026e605本地到管理蹦床1+420
12 XTestApp 0x0026ea31-[AppDelegate应用程序:didFinishLaunchingWithOptions:+100
13 UIKit 0x29b9e293+374
14 UIKit 0x29d94b29+2444
15 UIKit 0x29d971e9+1412
16 UIKit 0x29da1e69+36
17 UIKit 0x29d9598b+130
18 FrontBoardServices 0x2cf95ec9+16
19芯基础0x264a3fd5+12
20芯基础0x264a3299+216
21 CoreFoundation 0x264a1dd3+1714
22 CoreFoundation 0x263ee201 CFRunLoopRunSpecific+476
23 CoreFoundation 0x263ee013 CFRunLoopRunInMode+106
24 UIKit 0x29b97e67+558
25 UIKit 0x29b92a59 UIApplicationMain+1440
26 XTestApp 0x0010710c包装器\u托管\u到\u本机\u UIKit\u UIApplication\u UIApplicationMain\u int\u字符串\uuuuuuuuuu intptr\u intptr+272
27 XTestApp 0x000e56dc UIKit_UIKit_UIApplication_Main_string__intptr_intptr+52
28 XTestApp 0x000e569c UIKit\U UIApplication\U Main\U string\U string\U string+204
29 XTestApp 0x000c8130 XTestApp应用程序主字符串+172
30 XTestApp 0x0022c4d8包装器\u运行时\u调用\u对象\u运行时\u调用\u动态\u intptr\u intptr\u intptr\u intptr+224
31 XTestApp 0x0029d933单声道jit运行时调用+1190
32 XTestApp 0x002da025单声道运行时调用+88
33 XTestApp 0x002dd4c7单声道运行时执行主+282
34 XTestApp 0x002dd309单声道运行时运行主+476
35 XTestApp 0x0028c5d9单声道实时执行+48
36 XTestApp 0x0032d3ec xamarin_干管+2184
37 XTestApp 0x0026f4dd干管+112
38 LydiDe.DyLIB 0x34 D19AAF+2 }基础。

所有包含Objective-C类别的静态库必须将
-ObjC
传递给本机链接器,否则类别可能会被删除()

这可以通过两种方式实现:

  • -gcc\u标志-ObjC
    添加到每个(设备)项目配置的项目iOS构建选项中的附加mtouch参数
  • 如果使用绑定项目,可以修改LinkWith属性以包含此链接器标志:

    [assembly: LinkWith ("...", LinkerFlags = "-ObjC")]
    

  • 所有包含Objective-C类别的静态库都必须将
    -ObjC
    传递给本机链接器,否则类别可能会丢失