Core Data 获取仅具有唯一属性的实体
Posted
技术标签:
【中文标题】Core Data 获取仅具有唯一属性的实体【英文标题】:Core Data fetch entities with only unique attributes 【发布时间】:2016-05-12 11:00:26 【问题描述】:我有一个具有以下属性的实体“Person”:
-名称 -姓 -年龄
我创建了许多对象:
(本, 布莱克, 18) (约翰,史密斯,19) (伊万,博尔佐夫,18 岁) (Den, Balan, 20) (肯特,布罗曼,20 岁)
如何接收数组或任何其他方式来构建只有唯一年龄 [18,19,20] 的表
请用 Swift 提供答案。
附:当然我可以获取所有对象,并手动搜索唯一的,但我希望有更好的解决方案)
谢谢!
【问题讨论】:
【参考方案1】:您可以同时使用 NSFetchRequest 的 propertiesToFetch
和 returnsDistinctResults
属性来获得所有实体的不同年龄结果。
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/#//apple_ref/occ/instp/NSFetchRequest/propertiesToFetch
let fetchRequest = NSFetchRequest(entityName: "Person")
fetchRequest.resultType = .DictionaryResultType
fetchRequest.propertiesToFetch = ["age"]
fetchRequest.returnsDistinctResults = true
let result = try! managedObjectContext.executeFetchRequest(fetchRequest)
【讨论】:
您能根据我的数据提供一个示例吗?【参考方案2】:您可以像下面的代码一样检索年龄,在视图加载时调用它,
var getAllLogObj = [NSManagedObject]()
var allLogsArray : NSMutableArray = NSMutableArray()
func getAllLogs()
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName:"Person")
var fetchedResults = [NSManagedObject]()
let _ : NSError! = nil
do
fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
getAllLogObj = fetchedResults
catch
print("Fetching error : \(error)")
if(getAllLogObj.count > 0)
self.allLogsArray.removeAllObjects()
self.allLogsArray = NSMutableArray()
for(var i : Int = 0; i < getAllLogObj.count; i++)
let ageString = getAllLogObj[i].valueForKey("age") as? NSString
self.allLogsArray.addObject(ageString)
self.tblComplaintList.reloadData()
它在我的最后工作正常。希望这对您也有帮助。
【讨论】:
【参考方案3】:感谢您的回答,但这正是我所说的“手动搜索”,我让它变得更简单了:
let fetchRequest = NSFetchRequest(entityName: "Person")
do
let results = try managedContext.executeFetchRequest(fetchRequest)
persons = results as! [Person]
catch let error as NSError
print("Could not fetch \(error), \(error.userInfo)")
var temporaryArray = [String]()
for person in persons
if let age = person.age
temporaryArray.append(age)
ages = Array(Set(temporaryArray))
【讨论】:
是的,这一定很简单,因为你需要做..! 分享你定义的变量的所有内容以上是关于Core Data 获取仅具有唯一属性的实体的主要内容,如果未能解决你的问题,请参考以下文章
IOS/objective-c/core-data:如何从相关实体获取属性
如何从Core Data中的字符串获取Processed字符串