Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios parse.com存储特定值一次_Ios_Objective C_Parse Platform_Pfobject - Fatal编程技术网

Ios parse.com存储特定值一次

Ios parse.com存储特定值一次,ios,objective-c,parse-platform,pfobject,Ios,Objective C,Parse Platform,Pfobject,我是Parse api的新手,正在尝试解决如何执行以下操作: 我的应用程序存储字符串(“foo”、“bar”等)。“foo”应该只存在一次,不管用户尝试添加它多少次——以及尝试添加该字符串多少次的计数。因此,如果四个用户试图添加字符串“foo”,我希望关联的PFObject如下所示: name: "foo" count: 4 (名称为“foo”的对象不得超过一个) 我知道我可以查询什么“foo”,检索它,然后更新计数,但我有一种感觉,如果多个用户同时尝试更新“foo”,则会存在竞争条件 通过解

我是Parse api的新手,正在尝试解决如何执行以下操作:

我的应用程序存储字符串(“foo”、“bar”等)。“foo”应该只存在一次,不管用户尝试添加它多少次——以及尝试添加该字符串多少次的计数。因此,如果四个用户试图添加字符串“foo”,我希望关联的
PFObject
如下所示:

name: "foo"
count: 4
(名称为“foo”的对象不得超过一个)

我知道我可以查询什么“foo”,检索它,然后更新计数,但我有一种感觉,如果多个用户同时尝试更新“foo”,则会存在竞争条件


通过解析API实现这一点的正确/最佳方法是什么(如果有必要,我会使用iOS)。

在保存之前解析云代码

在进行保存之前,请检查该行是否存在,并对其进行更新,然后返回
response.error()

大概是这样的:

Parse.Cloud.beforeSave("MyObject", function(request, response) {
  var newObject = request.object;
  if(!newObject.existed()) {
    var query = new Parse.Query("MyObject");
    var name = newObject.get("name");
    query.equalTo("name", name);
    query.first().then(function(existing){
      if(existing){
        existing.increment("count");
        return existing.save().then(function(){
          response.error(name + " already exists");
        });
      }
      else {
        response.success();
      }
    });
  }
  else {
    response.success();
  }
});

Parse为您提供了一个incrementKey方法,可以帮助您避免在多个用户尝试更新计数器时出现问题。如果需要,还可以按给定的数量递减或递增。他们称之为计数器。但这只解决了竞争条件问题

[myString incrementKey:@"count"];
[myString saveInBackground];

您可以在此处找到更多信息:。

请重新阅读问题。incrementKey:不阻止保存多个同名对象@斯瓦登的回答完全解决了这个问题。你是对的,这只解决了比赛条件问题。。。我来看看ccwasden的答案嗯。。。为什么我的问题被否决了?我不清楚是否需要使用CloudCode来实现这种行为。