我正在考虑将我们维护的旧应用程序移植到Xamarin以获得iOS和Android版本之间的共享代码库的可能性。
不幸的是,我在移植iOS应用时遇到了一些问题。我已经摆弄了不同的方法来解决这个问题,以使用nib文件作为主要入口点启动应用程序(因为这是我们当前的应用程序所做的,它已经过时了)。无论我做什么,它似乎总是崩溃或变黑。
以下是我的尝试大纲:
答案 0 :(得分:0)
因此,如果您查看状态跟踪,您将看到在尝试建立出口连接时抛出ObjC异常:
0 CoreFoundation 0x008dea14 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x0890ce02 objc_exception_throw + 50
2 CoreFoundation 0x008de631 -[NSException raise] + 17
3 Foundation 0x00f371bc -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 282
4 Foundation 0x00e9183a _NSSetUsingKeyValueSetter + 115
5 Foundation 0x00e917bf -[NSObject(NSKeyValueCoding) setValue:forKey:] + 295
6 Foundation 0x00ec601d -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 384
7 UIKit 0x03639cb4 -[UIRuntimeOutletConnection connect] + 132
查看您的.xib
,已定义连接,但您在C#(以及生成的.h
)中没有匹配的定义,因此将其注释掉将允许{{1}要在运行时进行解析:
.xib
除了具有两个属性设置的UIView之外,<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MainNib">
<!--
<connections>
<outlet property="view" destination="2" id="RRd-Eg-VrN"/>
</connections>
-->
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="2">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</objects>
</document>
中没有任何内容。
答案 1 :(得分:0)
我相信您的MainNib
包含在代码中使用但与属性无关的组件。
可能的解决方案:
*右键单击MainNib
文件 - &gt; Open With
- &gt; Xcode Interface Builder
。
Xcode
将以.xib
个文件打开。
*在File's Owner
中的Placeholders
下选择Document Outline
(在 ProjectNavigator 和 Storyboard Canvas 之间)。
*单击Xcode
右侧的 Connections Inspector
*检查您将从代码操作的所有视图组件是否与其相应的属性相关联
*修复连接,或在需要时创建属性
*保存更改并关闭xcode
*刷新您的Xamarin
项目或重新打开项目并运行。
希望能解决这个问题。
答案 2 :(得分:0)
我在github上挖掘了一些代码示例并找到了一个合适的解决方案。无论Xamarin在启动主窗口的幕后做什么似乎都不兼容在Info.plist文件中设置主笔尖。例如,AQTapDemo project通过在AppDelegate中手动加载视图控制器而不是依赖于Info.plist属性的自动加载来解决此问题。