gpt4 book ai didi

ios - 在诸如fetchIfNeededInBackgroundWithBlock之类的 block 中使用PFObject的子类时出现问题

转载 作者:行者123 更新时间:2023-12-01 18:58:39 29 4
gpt4 key购买 nike

我在理解如何使用带有块的子类对象时遇到了麻烦。
这是我正在尝试的示例。 PFItem是PFObject的子类。

- (void) handleItem:(PFItem *)item{
[item fetchIfNeededInBackgroundWithBlock:^(PFItem *item, NSError *error) {
if (!error) {
if ([item.name isEqualToString:@"Antidote"]) {
NSLog(@"Applied %@", item.name);
NSMutableArray *discardItems = [NSMutableArray array];
for (PFItem *item in self.pfButtonCharacter.itemsApplied) {
if (item.malicious) {
[discardItems addObject:item];
NSLog(@"Removing %@", item.name);
}
}
[PFObject deleteAll:discardItems];
}
}
}];
}

但是,xcode将其标记为语义错误:

不兼容的块指针类型将'void(^)(PFItem * __ strong,NSError * __ strong)'发送到类型'PFObjectResultBlock'的参数(又名'void(^)(PFObject * __ strong,NSError * __ strong)')

如果我在fetchIfNeededInBackgroundWithBlock中从PFItem更改为PFObject,则可以使用,但是我将无法再访问item的属性。代替 item.name,我需要做 item[@"name"]

最佳答案

如果方法指定,则必须使用带有PFObject参数而不是PFItem参数的块,那么您必须使用与该方法匹配的块。

如果您知道要发送的对象实际上是PFItem,则可以始终将其强制转换为该块:

[item fetchIfNeededInBackgroundWithBlock:^(PFObject *obj, NSError *error) {
PFItem *item;
if ([obj isKindOfClass:[PFItem class]]) {
item = (PFItem *)obj;
} else {
return;
}
if (!error) {
if ([item.name isEqualToString:@"Antidote"]) {
NSLog(@"Applied %@", item.name);
NSMutableArray *discardItems = [NSMutableArray array];
for (PFItem *item in self.pfButtonCharacter.itemsApplied) {
if (item.malicious) {
[discardItems addObject:item];
NSLog(@"Removing %@", item.name);
}
}
[PFObject deleteAll:discardItems];
}
}
}];

关于ios - 在诸如fetchIfNeededInBackgroundWithBlock之类的 block 中使用PFObject的子类时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589092/

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