- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我遇到了与此提交中确定的完全相同的问题: MvvmCross/Xamarin "This class is not key value coding-compliant for the key"
问题源于尝试在 IOS CollectionView 中使用 MVVMCross 数据绑定(bind)
那篇文章已关闭并标记为重复,但我不这么认为。它作为解决方案链接到的文章提供了使用 XCode 作为开发环境时的解决方法。我的场景和上面链接的问题中描述的场景是在 Windows 上使用 Visual Studio 和 Xamarin 进行构建。使用 Visual Studio,XIB 编辑器和连接 socket 的方式有所不同。
几天来我一直在努力解决这个问题,但没有想出任何办法。我希望在 Windows Visual Studio 中看到过此问题的人有可以共享的解决方案。
(抱歉,我是新手,所以我不能在原帖中发表评论)。
错误的堆栈跟踪如下
Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSUnknownKeyException Reason: [<NSObject 0x7c4eb9a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.
Native stack trace:
0 CoreFoundation 0x00928494 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x08fa3e02 objc_exception_throw + 50
2 CoreFoundation 0x009280b1 -[NSException raise] + 17
3 Foundation 0x014477f8 -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 282
4 Foundation 0x013a1e6a _NSSetUsingKeyValueSetter + 115
5 Foundation 0x013a1def -[NSObject(NSKeyValueCoding) setValue:forKey:] + 295
6 Foundation 0x013d654b -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 384
7 UIKit 0x03bc8a62 -[UIRuntimeOutletConnection connect] + 132
8 libobjc.A.dylib 0x08fb800c -[NSObject performSelector:] + 62
9 CoreFoundation 0x00851131 -[NSArray makeObjectsPerformSelector:] + 273
10 UIKit 0x03bc70fc -[UINib instantiateWithOwner:options:] + 2102
11 UIKit 0x041205ec -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 750
12 UIKit 0x04120f35 -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 194
13 ??? 0x1b909f9c 0x0 + 462462876
14 ??? 0x1be1b820 0x0 + 467777568
15 ??? 0x1be1b633 0x0 + 467777075
16 ??? 0x1be1adf6 0x0 + 467774966
17 ??? 0x1be1b08d 0x0 + 467775629
18 CompanionForSpotifyiOS 0x001bb2a1 mono_jit_runtime_invoke + 705
19 CompanionForSpotifyiOS 0x00276fef mono_runtime_invoke + 127
20 CompanionForSpotifyiOS 0x0034bb77 xamarin_trampoline + 5559
21 UIKit 0x0410d5ee -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 448
22 UIKit 0x0410d2ff -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 65
23 UIKit 0x04111761 -[UICollectionView _updateVisibleCellsNow:] + 6023
24 UIKit 0x041167df -[UICollectionView layoutSubviews] + 254
25 UIKit 0x038543d4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 810
26 libobjc.A.dylib 0x08fb8059 -[NSObject performSelector:withObject:] + 70
27 QuartzCore 0x0b5d8096 -[CALayer layoutSublayers] + 144
28 QuartzCore 0x0b5cb8b6 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 388
29 QuartzCore 0x0b5cb71a _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
30 QuartzCore 0x0b5bdee7 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 317
31 QuartzCore 0x0b5f2847 _ZN2CA11Transaction6commitEv + 561
32 QuartzCore 0x0b5f3108 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92
33 CoreFoundation 0x0083a75e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
34 CoreFoundation 0x0083a6be __CFRunLoopDoObservers + 398
ViewModel代码在这里
public partial class AlbumCell : MvxCollectionViewCell
{
public static readonly UINib Nib = UINib.FromName("AlbumCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString("AlbumCell");
public AlbumCell(IntPtr handle) : base(string.Empty, handle)
{
this.DelayBind(() =>
{
var set = this.CreateBindingSet<AlbumCell, Album>();
set.Bind(artistNameLabel).To(album => album.ArtistName);
set.Apply();
});
}
public static AlbumCell Create()
{
return (AlbumCell)Nib.Instantiate(null, null)[0];
}
}
这是具有导出的 View 模型的生成组件 [注册(“AlbumCell”)] 部分类 AlbumCell { [导出] [GeneratedCode ("iOS Designer", "1.0")] UILabel artistNameLabel { get;放;
void ReleaseDesignerOutlets ()
{
if (artistNameLabel != null) {
artistNameLabel.Dispose ();
artistNameLabel = null;
}
}
}
最后,这是非常基本的 XIB - 它只有一个标签
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AlbumCell">
<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"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" fixedFrame="YES" text="Label" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="279" y="95" width="42" height="21"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</objects>
</document>
下面是我从父 ViewController 创建单元格对象实例的代码
public partial class NewReleasesView : MvxCollectionViewController
{
public NewReleasesView()
: base(new UIKit.UICollectionViewFlowLayout()
{
ItemSize = new CoreGraphics.CGSize(250,200),
ScrollDirection = UICollectionViewScrollDirection.Vertical
})
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
CollectionView.RegisterNibForCell(AlbumCell.Nib, AlbumCell.Key);
var source = new MvxCollectionViewSource(CollectionView, AlbumCell.Key);
CollectionView.Source = source;
var set = this.CreateBindingSet<NewReleasesView, NewReleasesViewModel>();
set.Bind(source).To(vm => vm.NewReleases);
set.Apply();
CollectionView.ReloadData();
var viewModel = this.ViewModel as IMvxViewModel;
viewModel.Start();
}
}
最佳答案
看起来 Visual Studio 将 socket 放在了错误的位置。请参阅下面我输入“Outlet was here”的位置。这就是生成 UI 标签的地方。我手动删除它然后进入 visual studio 中的 XIB 编辑器并在设计器中重新添加导出名称。那时,它把它放在正确的位置,我标记为“当它应该在这里”。
我不确定最初是什么导致了这种行为,但这个变通办法确实起到了作用。感谢所有帮助过我的人。
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AlbumCell">
<connections>
***OUTLET WAS HERE***
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1" customClass="AlbumCell">
<rect key="frame" x="0.0" y="0.0" width="250" height="250"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" customColorSpace="calibratedWhite" colorSpace="calibratedWhite" white="0" alpha="1"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Label" lineBreakMode="tailTruncation" minimumFontSize="10" id="4" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" customClass="UILabel">
<rect key="frame" x="53" y="20" width="177" height="21"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" colorSpace="calibratedWhite" white="1" alpha="1"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<size key="freeformSize" width="600" height="600"/>
<connections>
***WHEN IT SHOULD HAVE BEEN HERE***
<outlet property="artistname" destination="4" id="name-outlet-4"/>
</connections>
</view>
</objects>
关于ios - 解决 "' NSUnknownKeyException',原因:This class is not key value coding-compliant for the key X” exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506095/
@Cacheable在同一类中方法调用无效 上述图片中,同一个类中genLiveBullets()方法调用同类中的queryLiveByRoom()方法,这样即便标识了Cacheable标签,
目录 @Transaction注解导致动态切换更改数据库失效 使用场景 遇到问题 解决 @Transaction
@RequestBody不能class类型匹配 在首次第一次尝试使用@RequestBody注解 开始加载字符串使用post提交(貌似只能post),加Json数据格式传输的时候,
目录 @Autowired注入static接口问题 @Autowired自动注入普通service很方便 但是如果注入static修饰的serv
目录 @RequestBody部分属性丢失 问题描述 JavaBean实现 Controller实现
目录 解决@PathVariable参数接收不完整的问题 今天遇到的问题是: 解决办法: @PathVariable接受的参
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚。后来终于找到了原因。 如果你也出现了这种情况,可以从下面开始排查。 1、特性 先来了解一下@Trans
概述: ? 1
场景: 在处理定时任务时,由于这几个方法都是静态方法,在aop的切面中使用@Around注解,进行监控方法调用是否有异常。 发现aop没有生效。 代码如下:
最近做项目的时候 用户提出要上传大图片 一张图片有可能十几兆 本来用的第三方的上传控件 有限制图片上传大小的设置 以前设置的是2M&nb
我已经实现了这个SCIM reference code在我们的应用程序中。 我实现的代码确实通过了此postman link中存在的所有用户测试集合。 。我的 SCIM Api 也被 Azure 接受
我一直对“然后”不被等待的行为感到困扰,我明白其原因。然而,我仍然需要绕过它。这是我的用例。 doWork(family) { return doWork1(family)
我正在尝试查找 channel 中的消息是否仍然存在,但是,我不确定如何解决 promise ,查看其他答案和文档,我可以看到它可能是通过函数实现的,但我是不完全确定如何去做。我希望能在这方面获得一些
我有以下情况: 同一工作区中的 2 个 Eclipse 项目:Apa 和 Bepa(为简洁起见,使用化名)。 Apa 项目引用(包括)Bepa 项目。 我在 Bepa 有一个类 X,具有公共(publ
这个问题已经有答案了: Why am I getting a NoClassDefFoundError in Java? (31 个回答) 已关闭 6 年前。 我正在努力学习 spring。所以我输入
我正在写一个小游戏,屏幕上有许多圆圈在移动。 我在两个线程中管理圈子,如下所示: public void run() { int stepCount = 0; int dx;
我在使用 Sympy 求解方程时遇到问题。当我运行代码时,例如: 打印(校正(10)) 我希望它打印一个数字 f。相反,它给我错误:执行中止。 def correction(r): from
好吧,我制作的每个页面都有这个问题。我不确定我做错了什么,但我所有的页面都不适用于所有分辨率。可能是因为我使用的是宽屏?大声笑我不确定,但在小于宽屏分辨率的情况下,它永远不会看起来正确。它的某些部分你
我正在尝试像这样进行一个非常简单的文化 srting 检查 if(culture.ToUpper() == "ES-ES" || "IT-IT") { //do something } else
Closed. This question is off-topic. It is not currently accepting answers. Learn more。 想改进这个问题吗?Upda
我是一名优秀的程序员,十分优秀!