Ios 从NSM托管对象中筛选出整数
我有以下核心数据属性Ios 从NSM托管对象中筛选出整数,ios,swift,nspredicate,Ios,Swift,Nspredicate,我有以下核心数据属性 @NSManaged public var part: [Int]? 并且它可能包含0或1或两者。我正在尝试筛选出包含1的部分,并执行了此操作 fetchRequest.predicate = NSPredicate(format:"part == %@", 1) 但是我得到了错误 线程1:EXC\u错误访问(代码=1,地址=0x1) 如果我做了以上的事情。我做错了什么?提前感谢。只需使用以下代码: let filteredArray = part.filter()
@NSManaged public var part: [Int]?
并且它可能包含0或1或两者。我正在尝试筛选出包含1的部分
,并执行了此操作
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
但是我得到了错误
线程1:EXC\u错误访问(代码=1,地址=0x1)
如果我做了以上的事情。我做错了什么?提前感谢。只需使用以下代码:
let filteredArray = part.filter() { $0 == 1 }
print(filteredArray.count)
你会得到想要的结果。希望这有帮助。只需使用以下代码:
let filteredArray = part.filter() { $0 == 1 }
print(filteredArray.count)
你会得到想要的结果。希望这有帮助。您编写的代码,即
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
在上面的代码中,您正试图根据部分是否为1来过滤所有获取的行
。所以这里基本上是使用part
作为Int
。但是根据声明,部分是一个数组[Int]
它肯定会抛出一个异常
获取后,您需要过滤每一行,如:
let filteredPart = part.filter({ $0 == 1 })
您编写的代码,即
fetchRequest.predicate = NSPredicate(format:"part == %@", 1)
在上面的代码中,您正试图根据部分是否为1来过滤所有获取的行
。所以这里基本上是使用part
作为Int
。但是根据声明,部分是一个数组[Int]
它肯定会抛出一个异常
获取后,您需要过滤每一行,如:
let filteredPart = part.filter({ $0 == 1 })
您也可以使用谓词实现同样的效果:
使用以下代码:
let part = [1,3,4,7,2,1,4,3,1,5,6,7,1,3,4,8,9,1]
let predicate = NSPredicate(format: "SELF == %d",1)
let result = (part as NSArray).filtered(using: predicate)
print(result)
输出:
[1,1,1,1,1]
您也可以使用谓词实现同样的效果:
使用以下代码:
let part = [1,3,4,7,2,1,4,3,1,5,6,7,1,3,4,8,9,1]
let predicate = NSPredicate(format: "SELF == %d",1)
let result = (part as NSArray).filtered(using: predicate)
print(result)
输出:
[1,1,1,1,1]
您可以使用过滤器(Swift 4.2)
输出:
[1, 1, 1, 1, 1, 1, 1]
您可以使用过滤器(Swift 4.2)
输出:
[1, 1, 1, 1, 1, 1, 1]
任何因为它是一个数组,所以您希望如果其中一个部分值是1?您面临的错误是什么?尝试了任何一个,没有工作NSManaged
属性可以声明为数组吗?我非常怀疑。我同意@vadian的观点,NSManaged
怎么可能是一个数组?有吗?因为它是一个数组,所以您希望如果其中一个部分值是1?您面临的错误是什么?尝试了任何一个,没有工作NSManaged
属性可以声明为数组吗?我非常怀疑。我同意@vadian的观点,NSManaged
怎么可能是数组?感谢您的解释,所以我不能将它作为谓词应用于获取请求。对。你不能<代码>部分是单个行的属性<代码>获取请求。谓词
将过滤器
应用于所有获取的行
@Coder221,您想获取其part
属性中包含1
的所有对象,还是想对part
属性本身做些什么?@user28434我只想获取部分中包含1的所有对象,什么都不取more@Coder221,那么这个答案就没用了。您应该在
中使用带的谓词,就像SELF中的%@一样。部分
或包含
感谢您的解释,因此我不能将其作为谓词应用于获取请求。对。你不能<代码>部分是单个行的属性<代码>获取请求。谓词
将过滤器
应用于所有获取的行
@Coder221,您想获取其part
属性中包含1
的所有对象,还是想对part
属性本身做些什么?@user28434我只想获取部分中包含1的所有对象,什么都不取more@Coder221,那么这个答案就没用了。您应该在
中使用带的谓词,如SELF.part
或CONTAINS
中的%@相反,您可以直接使用过滤函数,如part.filter({$0==1})
是,但Coder221希望使用谓词实现它,因此,这是另一种方法,通过它我们可以得到相同的结果。Coder221希望在NSFetchRequest
上设置谓词,而不是在数组上。相反,您可以直接使用筛选函数,如part.filter({$0==1})
是,但Coder221希望使用谓词实现它,因此,这是一种替代方法,通过它我们可以得到相同的结果。Coder221希望在NSFetchRequest
上设置谓词,而不是在数组上。