Xamarin主笔尖文件

时间:2016-02-03 17:33:56

标签: ios xamarin nib

我正在考虑将我们维护的旧应用程序移植到Xamarin以获得iOS和Android版本之间的共享代码库的可能性。

不幸的是,我在移植iOS应用时遇到了一些问题。我已经摆弄了不同的方法来解决这个问题,以使用nib文件作为主要入口点启动应用程序(因为这是我们当前的应用程序所做的,它已经过时了)。无论我做什么,它似乎总是崩溃或变黑。

以下是我的尝试大纲:

  1. 创建新的跨平台 - 单一视图应用程序,为其命名(例如样本)
  2. 删除Main.storyboard和ViewController.cs
  3. 展开Sample.iOS,右键单击并添加新文件> iOS>查看控制器,为其命名(例如MainNib)
  4. 打开Info.plist,将主界面更改为MainNib,用于iPhone / iPod和iPad部署
  5. 保存并运行>黑色
  6. 打开Info.plist,转到源编辑器并删除主要的故事板属性,添加“主nib文件名”和“主nib文件名(iPad)”条目,其值为“MainNib”
  7. 保存并运行>崩溃抱怨名为view的财产上的键值合规性

3 个答案:

答案 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属性的自动加载来解决此问题。