- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过“function
”属性搜索NSArray
。我在控制台打印数组时的输出如下:
<__NSArrayI 0xa523b40>(
{
category = "010-T";
description = "<h3>Opleidingen</h3>";
function = "T-r";
name = "Michal Jordan";
photo = "http://dws.com/34.jpg";
},
{
category = "010-T";
description = "abcd";
function = "AB";
name = "Pvt MSK";
photo = "http://test.com/3.jpg";
},
{
category = "010-T";
description = "def";
function = "T-r";
name = "Sanu M";
photo = "http://abc.com/1.jpg";
}
)
此代码按“category
”搜索,有效:
NSString *categoryStr = @"010-T";
NSArray *arr = [NSArray arrayWithArray:[myarr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"category == %@",categoryStr]]];
但是当我尝试使用以下代码(通过函数
搜索)时,抛出了异常:
NSString *functionStr = @"T-r";
NSArray *arr = [NSArray arrayWithArray:[myarr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"function == %@",functionStr]]];
异常(exception)是:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "function == %@"'
所以看起来,function
是一个保留关键字。
我尝试了以下代码,用单引号将 function
括起来,但结果是 arr
有 0 个对象。
NSArray *arr = [NSArray arrayWithArray:[myarr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"'function' == %@",functionStr]]];
我在这里做错了什么?
最佳答案
Apple 的 Predicate Programming Guide声明“Cocoa 中的谓词表达式由 NSExpression 的实例表示”。请注意,NSExpression
提供了一种语法,可以通过FUNCTION
关键字来调用方法。 The docs将语法定义为FUNCTION(receiver,selectorName,arguments, ...)
。虽然我在任何文档中都没有找到对此的引用,但似乎此功能排除了在其他上下文中使用文字函数。
幸运的是,您可以使用用于键名称的 %K
格式说明符以另一种方式构建谓词格式字符串。例如,[NSPredicate predicateWithFormat:@"%K == %@", @"function", @1]
不会抛出异常并且可以正常工作。请通过以下代码查看其实际效果:
NSDictionary *dict1 = @{@"otherKey": @1, @"function" : @2};
NSDictionary *dict2 = @{@"otherKey": @2, @"function" : @1};
NSArray *array = @[dict1, dict2];
NSPredicate *otherKeyPredicate = [NSPredicate predicateWithFormat:@"%K == %@",@"otherKey", @1];
NSArray *filteredByOtherKey = [array filteredArrayUsingPredicate:otherKeyPredicate];
NSPredicate *functionPredicate = [NSPredicate predicateWithFormat:@"%K == %@", @"function", @1];
NSArray *filteredByFunction = [array filteredArrayUsingPredicate:functionPredicate];
NSLog(@"filteredByOtherKey = %@", filteredByOtherKey);
NSLog(@"filteredByFunction = %@", filteredByFunction);
我们在控制台上得到以下输出:
filteredByOtherKey = (
{
function = 2;
otherKey = 1;
}
)
filteredByFunction = (
{
function = 1;
otherKey = 2;
}
)
以这种方式构造谓词可能会稍微多一些工作,但可以防止将来出现这些类型的冲突。前进的一个好习惯是将格式字符串限制为仅包含格式说明符和谓词语法,在运行时最终确定谓词的表达式字符串。
关于ios - 使用 NSPredicate 的 predicateWithFormat : 时“无法解析格式字符串 "function == %@"”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15801537/
我在核心数据 NSManagedObjectContextDidSaveNotification 中运行一个谓词来过滤我感兴趣的相关对象。 - (void)didSaveNotficiation:
嘿,所以我正在使用 NSPredicate 来过滤数组。目前我使用以下代码: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"S
我需要对不同的类进行搜索,一个是歌曲,另一个是专辑。 eclipse 刻其中之一是用他的属性(名称、url 等)代表歌曲/专辑。现在我正在使用此代码通过搜索 name 属性从我的 songArray
任何人都可以帮助我使用下面的代码。它在我看来是正确的,但最后一条语句会导致异常。我想要做的就是创建一个 NSPredicate 以与 NSFetchRequest 一起使用。 根据调试器,下面的“Ar
我在使用 predicateWithFormat 方法创建 NSPredicate 类型对象时遇到问题。 AppDelegate *appdelegateObj = (AppDelegate *)[[
我的 predicateWithFormat 出现错误,导致我的应用程序崩溃。 有问题的代码是: @implementation SecondViewController { NSArray *sea
我有这段工作代码,但现在我需要能够根据 predicateWithFormat 中使用的对象更改 NSPredicate,如下所示: NSFetchRequest *fetchRequest = [[
关于 NSPredicate 的简单问题。我正在尝试使用像这样的“传入”值来构造我的谓词: NSPredicate* currentPredicate = [NSPredicate predicate
我有一个带有坐标(x,y,z)的实体的商店。我想通过使用像 @"sqrt(xx + yy + z*z) < distance"这样的谓词来获取它们。 有什么办法可以做到这一点吗? 我尝试使用 pred
我有一个问题,我不知道为什么方法2取不到值? 方法一:可以取值! -(void) searchBar:(UISearchBar *) searchBar textDidChange:(NSString
我正在尝试过滤 Core Data 实体。 当尝试在 NSPredicate 中使用或 || 逻辑运算符时,出现谓词解析错误。 Terminating app due to uncaught exce
这听起来可能很傻,但这里是要断言的数据: @interface Person @property NSString *name; @property NSString *phone; @propert
我对 NSPredicate 的 predicateWithFormat: 方法有一个(对我来说)奇怪的案例。 我使用以下命令将两个 NSPredicate 实例的描述记录到控制台: NSNumber
当前尝试设置搜索将搜索如下所示的数组 (bakeryProductArray) “茶叶面包”, 提拉木苏, “糖浆面包”, 琐事, “三重巧克力布朗尼”, 松露, “各种海绵”, “维也纳旋风”, “
在根据用户输入过滤我的 NSMutableDictionary 时,我创建了以下代码: NSString *predicateString = [NSString stringWithFormat:@
我有一个包含文件名的数组,我想找到所有以例如结尾的名称。 00001.trc 当 traceNum 为 1 时。我试过这个: NSPredicate *tracePredicate = [NSPred
我需要将自定义字符串附加到 NSPredicate . 所以我写了以下代码。 self.query = [[NSMetadataQuery alloc] init]; [self.query setS
我在使用 NSPredicate predicateWithFormat:argumentArray 时遇到了一些问题:。在此示例中,serverIDList 是字符串数组。结果是一个 NSManag
我正在尝试通过“function”属性搜索NSArray。我在控制台打印数组时的输出如下: ( { category = "010-T"; description = "Opleidi
我正在显示事件列表中的多项任务。为了实现这一目标,我使用 NSPredicate predicateWithFormat: 来选择列表中的项目。但我遇到的问题是关于该列表中先前删除的任务。即使它们没有
我是一名优秀的程序员,十分优秀!