Xamarin 主笔尖文件
Xamarin Main Nib File
我正在研究将我们维护的旧应用程序移植到 Xamarin 以在我们的 iOS 和 Android 版本之间获得共享代码库的可能性。
不幸的是,我 运行 在移植 iOS 应用程序时遇到了一些问题。我尝试了不同的方法来解决这个问题,让应用程序以 nib 文件作为主要入口点启动(因为这是我们当前应用程序所做的,它是旧的)。无论我做什么,它似乎总是崩溃或变黑。
以下是我的尝试概要:
- 创建新的跨平台 - 单视图应用程序,为其命名(例如示例)
- 删除 Main.storyboard 和 ViewController.cs
- 展开 Sample.iOS,右键单击并添加新文件 > iOS > 视图控制器,为其命名(例如 MainNib)
- 打开 Info.plist,将 iPhone/iPod 和 iPad 部署的主界面更改为 MainNib
- 保存并 运行 > 变黑
- 打开Info.plist,转到源代码编辑器并删除主情节提要属性,添加“Main nib file name”和“Main nib file name (iPad)”值为“MainNib”的条目
- 保存并 运行 > 崩溃抱怨 属性 命名视图
上的键值合规性
因此,如果您查看状态跟踪,您会看到在尝试建立出口连接时抛出 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
),因此将其注释掉将允许 .xib
要在运行时更正解析:
<?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>
除了具有两个属性设置的 UIView 之外,.xib
中没有任何内容。
我相信您的 MainNib
有代码中使用的组件,但缺少与属性的连接。
可能的解决方案:
* 右击 MainNib
文件 -> Open With
-> Xcode Interface Builder
。
Xcode
将打开那个 .xib
文件。
* Select File's Owner
在 Document Outline
中的 Placeholders
下(在 ProjectNavigator 和 Storyboard Canvas 之间)。
* 单击Xcode
右侧的Connections Inspector。
* 检查您将从代码中操作的所有视图组件是否与其相应的属性相关联。
* 修复连接,或根据需要创建属性。
* 保存更改并关闭 xcode.
* 刷新您的 Xamarin
项目或重新打开项目并 运行.
希望能解决崩溃问题。
我仔细研究了 github 上的一些代码示例并找到了合适的解决方案。无论 Xamarin 在幕后做什么来启动主 Window 似乎都与在 Info.plist 文件中设置主笔尖不兼容。例如,AQTapDemo project 通过在 AppDelegate 中手动加载视图控制器来解决此问题,而不是依赖从 Info.plist 属性自动加载。
我正在研究将我们维护的旧应用程序移植到 Xamarin 以在我们的 iOS 和 Android 版本之间获得共享代码库的可能性。
不幸的是,我 运行 在移植 iOS 应用程序时遇到了一些问题。我尝试了不同的方法来解决这个问题,让应用程序以 nib 文件作为主要入口点启动(因为这是我们当前应用程序所做的,它是旧的)。无论我做什么,它似乎总是崩溃或变黑。
以下是我的尝试概要:
- 创建新的跨平台 - 单视图应用程序,为其命名(例如示例)
- 删除 Main.storyboard 和 ViewController.cs
- 展开 Sample.iOS,右键单击并添加新文件 > iOS > 视图控制器,为其命名(例如 MainNib)
- 打开 Info.plist,将 iPhone/iPod 和 iPad 部署的主界面更改为 MainNib
- 保存并 运行 > 变黑
- 打开Info.plist,转到源代码编辑器并删除主情节提要属性,添加“Main nib file name”和“Main nib file name (iPad)”值为“MainNib”的条目
- 保存并 运行 > 崩溃抱怨 属性 命名视图 上的键值合规性
因此,如果您查看状态跟踪,您会看到在尝试建立出口连接时抛出 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
),因此将其注释掉将允许 .xib
要在运行时更正解析:
<?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>
除了具有两个属性设置的 UIView 之外,.xib
中没有任何内容。
我相信您的 MainNib
有代码中使用的组件,但缺少与属性的连接。
可能的解决方案:
* 右击 MainNib
文件 -> Open With
-> Xcode Interface Builder
。
Xcode
将打开那个 .xib
文件。
* Select File's Owner
在 Document Outline
中的 Placeholders
下(在 ProjectNavigator 和 Storyboard Canvas 之间)。
* 单击Xcode
右侧的Connections Inspector。
* 检查您将从代码中操作的所有视图组件是否与其相应的属性相关联。
* 修复连接,或根据需要创建属性。
* 保存更改并关闭 xcode.
* 刷新您的 Xamarin
项目或重新打开项目并 运行.
希望能解决崩溃问题。
我仔细研究了 github 上的一些代码示例并找到了合适的解决方案。无论 Xamarin 在幕后做什么来启动主 Window 似乎都与在 Info.plist 文件中设置主笔尖不兼容。例如,AQTapDemo project 通过在 AppDelegate 中手动加载视图控制器来解决此问题,而不是依赖从 Info.plist 属性自动加载。