核心数据 - NSPredicate过滤掉空字符串工作不正确

时间:2014-02-27 23:42:56

标签: ios core-data

我一直在我的项目中使用核心数据。几天前,我发现保存在数据库中的一些记录没有显示在应用程序UI中。我已经跟踪了它,发现当我使用NSPredicate过滤掉空字符串时,它们根本就没有被取出。所有这些都以非字母字符开头。

为了澄清问题,我创建了一个示例项目并将一些示例数据添加到数据库中。假设它们是“Sample”,“+ sample”,“Sample +”。

这是我用来过滤掉空字符串的代码片段。 “text”是字符串属性的名称,moc是NSManagedObjectContext实例。

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"BasicEntity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text.length > 0"];
[request setPredicate:predicate];

NSArray *samples = [moc executeFetchRequest:request error:&error];

结果数组只包含2个实体,即“Sample”和“Sample +”。

我甚至在包含上面示例字符串的简单数组上尝试了相同的谓词(当然,使用self.length而不是text.length),并且我正确地得到了所有3个。

我想知道是否有人遇到同样的问题。或者我在使用核心数据时遗漏了什么? 在iOS 7.0.3模拟器和测试器上测试7.0.6 iPad Air。


更新:正如另一个帖子所回答的那样,我使用正则表达式解决了这个问题。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text MATCHES %@", @".{1,}"];

不过,我相信我使用的原始谓词是有效的。我将向Apple提交一个错误以获取他们的意见。

2 个答案:

答案 0 :(得分:4)

这就是你想要的

<body style="background:navy; color:white;">
<form id="myForm">

<h1>You Are Uploading Files to Adam</h1>

<label>Name of Uploader (You)</label>
<input type="text" name="myName" placeholder="Full Name">

<label>Brief Description of File</label>
<input type="text" name="fileName" placeholder="Session title, etc.">

<input type="file" name="myFile">

<input type="submit" value="Upload File" 
       onclick="this.value='Uploading..';
                google.script.run.withSuccessHandler(fileUploaded)
                .uploadFiles(this.parentNode);
                return false;">

<p style="color:yellow">Depending on the total size of your file uploading may take a few moments...</p>

</form>
</body>
<div id="output"></div>

<script>
function fileUploaded(status) {
    document.getElementById('myForm').style.display = 'none';
    document.getElementById('output').innerHTML = status;
}
</script>

<style>
input { display:block; margin: 20px; }
</style>

如果您还需要检查[NSPredicate predicateWithFormat:@"%K != %@", @"text", @""] / nil,请执行以下操作:

NULL

答案 1 :(得分:-2)

试试这个:

setTimeout(function(ev) {

    $("#video")[0].src += "&autoplay=1";
    ev.preventDefault();

  }, 5000);