gpt4 book ai didi

ios - PFObject 的 saveInBackgroundWithBlock : method - the block doesn't get called

转载 作者:行者123 更新时间:2023-11-29 12:36:24 25 4
gpt4 key购买 nike

考虑这个简单的方法:

- (void)connectSpouseToCurrentUser:(PFUser *)spouse completionBlock:(void (^)(NSError *error))completionBlock {
[PFUser currentUser][@"spouse"] = spouse;
[[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (error) {
NSLog(@"Error: %@", [error userInfo]);
}

spouse[@"spouse"] = [PFUser currentUser];
[spouse saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
// This code never executes
NSLog(@"Error: %@", error);
self.spouse = spouse;
if (completionBlock) {
completionBlock(error);
}
}];
}];
}

由于某些原因,我最新的完成 block 没有被调用。

有人知道为什么会这样吗?

最佳答案

对于使用数组列类型的一对多关系遇到此问题的人,

如果将数组分配给 Array 列类型,则不会调用完成 block 。但是,数据已保存。但是,无法在 parse.com 仪表板中可视化连接。

我有两个表,User 和 Education。一个用户可以有多个教育对象。在以下代码中,永远不会调用完成 block 。

import Parse

var education : [MyEducation] = [MyEducation]()

let edu1 : MyEducation = MyEducation()
edu1["schoolName"] = "Stanford"
edu1["fieldOfStudy"] = "Engineering"
edu1["startDate"] = NSDate()
education.append(edu1)

let edu2 : MyEducation = MyEducation()
edu2["schoolName"] = "UCLA"
edu2["fieldOfStudy"] = "Data Science"
edu2["startDate"] = NSDate()
education.append(edu2)

PFUser.currentUser()?["education"] = education
PFUser.currentUser()?.saveInBackgroundWithBlock{(success: Bool, error: NSError?) -> Void in
let a : Int = 1
}

但是,如果您编写以下代码,则会调用完成 block 。

import Parse

var education : [MyEducation] = [MyEducation]()

let edu1 : MyEducation = MyEducation()
edu1["schoolName"] = "Stanford"
edu1["fieldOfStudy"] = "Engineering"
edu1["startDate"] = NSDate()
edu1["user"] = PFUser.currentUser()
education.append(edu1)

let edu2 : MyEducation = MyEducation()
edu2["schoolName"] = "UCLA"
edu2["fieldOfStudy"] = "Data Science"
edu2["startDate"] = NSDate()
edu2.["user"] = PFUser.currentUser()
education.append(edu2)

PFUser.currentUser()?.saveInBackgroundWithBlock{(success: Bool, error: NSError?) -> Void in
let a : Int = 1
}

因此,最终选择哪种方法由您决定。前者使仪表板中的可视化变得更难(或不可能?),但您可以稍后使用 includeKey("education") 进行 PFUser 查询。

在后一种方法中,您必须在教育类中查询完整的 PFObject,但教育类中指向用户的指针在仪表板中可见,并且完成 block 被调用。

我认为 Parse 没有很好地设计关系获取,并且没有记录这种行为。

关于ios - PFObject 的 saveInBackgroundWithBlock : method - the block doesn't get called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26200360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com