Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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
Ios MvvmCross中的CoreAnimation和ObservableCollection_Ios_Uitableview_Xamarin.ios_Core Animation_Mvvmcross - Fatal编程技术网

Ios MvvmCross中的CoreAnimation和ObservableCollection

Ios MvvmCross中的CoreAnimation和ObservableCollection,ios,uitableview,xamarin.ios,core-animation,mvvmcross,Ios,Uitableview,Xamarin.ios,Core Animation,Mvvmcross,我的ViewModel带有一个ObservableCollection private ObservableCollection<ObjectView> _elementList; public ObservableCollection<ObjectView> ElementList { get { return _elementList; } set { _elementList = value; RaisePropertyChanged("Elemen

我的ViewModel带有一个ObservableCollection

private ObservableCollection<ObjectView> _elementList;
public ObservableCollection<ObjectView> ElementList
{
    get { return _elementList; }
    set { _elementList = value; RaisePropertyChanged("ElementList"); }
}
private observeCollection\u元素列表;
公共可观测集合元素列表
{
获取{return\u elementList;}
set{u elementList=value;RaisePropertyChanged(“elementList”);}
}
这是通过一个异步线程绑定的,当从TableView调用重载数据时(即在我的TableView上有一个endlessscroll)。我注意到了这个错误(有时,并非总是,使我的应用程序崩溃):

2月28日10:14:25 iPhone di Luigi JRUITouch[4518]:CoreAnimation:警告,已删除未提交CATTransaction的线程;创建人:
0夸脱芯0x31ce00a5+268
1夸脱芯0x31cdff59+224
2夸脱芯0x31ce05bb+30
3夸脱芯0x31ce1f6b+158
4夸脱芯0x31ce546d+40
5 UIKit 0x3219a2c5+48
6 UIKit 0x321d0c65+460
7 UIKit 0x321d0a45+68
8芯基础0x2f8240f3+90
9芯基础0x2f824003+198
10 UIKit 0x3213a825+628
11 LSUITouch 0x001a24ec包装器\u托管\u到\u本机\u单点触摸\u对象运行时\u消息传递\u无效\u对象运行\u msgSend \u intptr\u intptr+100
12 LSUITouch 0x0017b948单触式UIKit UITableView重新加载数据+52
13 LSUITouch 0x00a210d4 Cirrial\u MvvmCross\u Binding\u Touch\u Views\u MvxBaseTableViewSource\u重载TableData+176
14 LSUITouch 0x00a24cf0 Cirrial\u MvvmCross\u Binding\u Touch\u Views\u MvxTableViewSource\u CollectionChangedOnCollectionChanged\u object\u System\u Collections\u Specialized\u NotifyCollectionChangedEventArgs+248

有人知道如何解决吗?

通过斯图尔特的建议解决了问题

从外部线程更新UI这将是危险的…可能会出现一些意外的效果。然后每次我在ObservableCollection上添加元素时,我都会以这种方式在主线程上调用此更新:

private void AddElementsOnMainThread(AdvertObjectView item){
            MvxMainThreadDispatcher.Instance.RequestMainThreadAction((Action)delegate(){ 
                ElementList.Add(item);
            });
        }

这样,我就没有更多的警告和我的UI线程,它的保护,从意想不到的惊喜

重新加载数据的代码在哪里?它是否在后台线程上添加到Colleciton?如果您没有使用Mono,我敢肯定错误消息提供了一些关于调试标志的信息,以便能够获取日志记录,帮助您跟踪此问题。在那里,它被称为
CA_DEBUG_TRANSACTIONS
,您可以将其作为环境变量设置为
1
。也许你可以看看Mono中是否有类似的东西?@DavidRönnqvist我必须设置
CA_DEBUG_TRANSACTIONS=1
来查看日志…@Stuart ReloadData这是TableView上的一个方法…是的,我在集合中添加元素,以避免
非法CrossThreadCall
我设置了
UIApplication.CheckForIllegalCrossThreadCalls=虚假的现在进行跨线程调用可能比关闭检查更好。。。警告存在是有原因的,例如:。
private void AddElementsOnMainThread(AdvertObjectView item){
            MvxMainThreadDispatcher.Instance.RequestMainThreadAction((Action)delegate(){ 
                ElementList.Add(item);
            });
        }