- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
抱歉,我想不出更好的标题方式。
基本上我有一个连接到 Parse 的应用程序。我已经指定了一个 Action ,它在文本字段更改时运行(即当用户键入字母时)
在此操作中,我调用 PFQuery 进行解析,然后我要求它查找 ObjectsInBackgroundWithBlock。
问题是,如果用户在此查询运行完成之前键入另一个字母,则现在有 2 个查询正在运行,并且两个查询的结果最终都会填充到 tableView 中。
所以我的问题很简单,如果用户在第一个 findObjectsInBackgroundWithBlock 完成之前输入另一个字母,我将如何取消第一个并运行新的字母?
我尝试在操作开始时插入 PFQuery.cancel(query),但是代码变得困惑,因为当操作第一次运行时还没有运行查询。
我的代码,可能有帮助:
@IBAction func textFieldChanged (sender: AnyObject) {
let query = PFUser.Query()
query!.whereKey("Postcode", containsString: searchField.text)
query?.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if let objects = objects {
for object in objects {
self.citiesArray.append(object["city"] as! String)
}
}
})
非常感谢您的耐心等待!
最佳答案
您可以尝试将这些请求包装在 NSOperation
中并将它们添加到专用的(用于此类搜索请求)NSOperationQueue
并调用 cancelAllOperations()
当输入新字符时。
在 NSOperation
的内部 Parse block 中检查 self.cancelled
并在取消时不执行任何操作返回。应该工作正常。
更新:
class ViewController: UIViewController { @IBOutlet weak var searchField: UITextField! var citiesArray = [String]() lazy var textRequestQueue: NSOperationQueue = { var queue = NSOperationQueue() queue.maxConcurrentOperationCount = 1 queue.qualityOfService = NSQualityOfService.UserInteractive return queue }() @IBAction func textFieldChanged(sender: AnyObject) { textRequestQueue.cancelAllOperations() let query = PFQuery() query.whereKey("Postcode", containsString: searchField.text) textRequestQueue.addOperation(TextRequestOperation(query: query, resultBlock: { (objects, error) -> Void in if let objects = objects { for object in objects { self.citiesArray.append(object["city"] as! String) } } })) }}class TextRequestOperation: NSOperation { typealias ResultBlock = ((result: String)->()) var _resultBlock: PFArrayResultBlock var _query: PFQuery init(query: PFQuery, resultBlock: PFArrayResultBlock) { self._resultBlock = resultBlock self._query = query } override func main() { if self.cancelled { return } _query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in if self.cancelled { return } self._resultBlock(objects, error) } }}
关于ios - Swift:如果在 PFQuery 完成之前再次运行函数,如何取消 PFQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788957/
抱歉,我想不出更好的标题方式。 基本上我有一个连接到 Parse 的应用程序。我已经指定了一个 Action ,它在文本字段更改时运行(即当用户键入字母时) 在此操作中,我调用 PFQuery 进行解
查询完成后是否可以执行某些操作?我有一个查询对象的 PFQuery,这些对象的 objectId 将附加到一个数组中。 materUserObjects 是一个 PFUser,MatesIdsAndN
这是一个非常基本的问题,但我真的不明白为什么我的代码不断循环查询。 我有一个由 Heroku 托管的解析服务器和一个 TableView Controller ,我正在尝试创建一个查询来返回 n 行(
所以我一直在添加信息来解析服务器,问题是我似乎无法通过 PFQuery 获取我需要的字符串。 如果我打印对象,它会返回一个空数组。另外(fahrtenRequests.count = 0)。有人认为这
我尝试在 PFQuery 中使用 AND 操作数,但在 query.whereKey... 处收到以下错误:有办法实现此目的吗? No '&&' candidates produce the expe
我正在尝试运行一个 PFQuery 来填充自定义结构数组。 一切看起来都不错,但是当我运行代码时,返回的查询是空的。我还使用 PFUser.Query 进行了尝试,该方法有效,但没有返回 object
我正在尝试执行多个 PFQuery 并正确存储数据。 我的计划是查询我的群组中的群组成员我正在寻找关键成员。它给了我一个objectIds数组。然后我想在我的 _User 类中使用键 firstIma
在一个类的所有列中,有两列存储图像。column1 和 column2 存储图像。 现在,我要实现的目标是从这些列中的任何一个获取图像。即获取除第 1 列以外的所有列或获取除第 2 列以外的所有列。从
我正在尝试查找当前用户的所有帖子。当我添加 [query whereKey:@"user"equalTo:[PFUser user]]; 行时,查询甚至没有执行,因为“检索帖子?”从不打印到控制台。当
我有一个自定义的 Parse 类... Follow ----------------- Follower - PFUser Followee - PFUser 我还在用户表中添加了一个自定义字段 f
我有一个用户、事件、照片类。用户喜欢其他用户的地方 附上事件类的截图https://dl.dropboxusercontent.com/u/33860877/Activity.png 我的问题是,当用
我有以下查询。它转到我的 Posts 类,并将所有帖子放入 PFObject 帖子数组中。 var query = PFQuery(className: "Posts") query.orderByD
let userQuery = PFUser.query() userQuery!.whereKey("username", equalTo: userUsername) userQuery!.fin
当用户注册时,他/她会被重定向到另一个 View Controller ,他们需要在其中验证他们的电话号码。我尝试设置 PFQuery 从 Parse 检索用户的代码,并查看它是否与验证文本字段中写入
我有两个表正在解析。 事件 field Activity 拥有两个键:UserID 和 VenueID。我想查询和检索 Activity 表中的 field 详细信息。 我正在尝试使用这个来做到这一点
我已经尝试使用 PFQuer 来获取包含用户的消息列表: PFQuery *query = [PFQuery queryWithClassName:@"Message"]; [query whereK
我有一个名为“匹配”的表。该表有几列字符串类型。我正在尝试创建一个查询来查询“player2”列中的字符串值“undefined”。这没有问题。当我查询时,我得到了结果。 但我想添加一个约束,以便它排
我不知道解析是怎么回事,但出于某种原因,它不允许我将检索到的数组保存到我创建的可变数组中。它在解析代码块内部工作,但一旦在外部,它就会显示 null。请帮助? PFQuery *query = [P
我直接从文档中复制了 PFQuery 的示例,将我的字段和类名称放入其中,但它从未命中 completionBlock。 - (void) loadMyWindows { PFQuery *q
我似乎无法让它发挥作用。我有一个数组 users ,它应该包含保存在 Parse 数据库中的所有用户。在查询中,users 由解析中的 PFUsers 填充。例如,如果我执行 println(self
我是一名优秀的程序员,十分优秀!