您的位置:首页 > 移动开发 > Objective-C

使用GetItemById出错“Detected use of SPRequest for previously closed SPWeb object.”

2014-02-14 11:50 381 查看
这个log错误信息又出现了:“Detected use of SPRequest for previously closed SPWeb object.”。这次是在GetItemById这个方法中抛出的,很奇怪为什么这个方法会使用web。查看了一下代码才知道,这个方法确实用到了list的web属性。

GetItemById方法在获取item的步骤是

1.使用Query查询,通过传入的item的id,查询list中的item,得到一个SPListItemCollection集合,这个集合的名字是items。这里没有任何问题。

2.判断这个集合是不是空的集合,方法是使用items.Count属性,如果不是空的集合,就返回Items[0]这个item。问题出在items.Count这个属性,这个属性调用了SPListItemCollection的EnsureListItemsData()方法,这个方法中使用了list的Web,因此报出了下面的完整的错误信息:

Detected use of SPRequest for previously closed SPWeb object.  Please close SPWeb objects when you are done with all objects obtained from them, but not before.  Stack trace:    at Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData()
at Microsoft.SharePoint.SPListItemCollection.get_Count()
at Microsoft.SharePoint.SPList.GetItemById(String strId, Int32 id, String strRootFolder, Boolean cacheRowsetAndId, String strViewFields, Boolean bDatesInUtc)
at Microsoft.SharePoint.SPList.GetItemById(Int32 id)
at...


所以这个时候,需要检查list的web是否已经被释放了。

如何正确避免这样的错误请参见:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐