我不太明白whereKey,equalTo是如何工作的。
我已阅读 Parse.com 上的文档及其他相关问题,但似乎并不了解如何关联和查找您要查找的对象。< / p>
我想要做的是在一个人不喜欢之后删除PFObject
(图像)。使用以下代码,我得到的Error
没有与查询匹配的结果。
有人可以向我解释这个链接的工作原理吗?
已编辑的代码(现在正确运行):
- (IBAction)likeLook:(id)sender {
if ([sender isSelected]) {
[sender setImage:[UIImage imageNamed:@"Like.png"] forState:UIControlStateNormal];
[sender setSelected:NO];
NSData *imageData = UIImageJPEGRepresentation(imageFile.image, 1);
[self deleteImage:imageData];
}
else {
[sender setImage:[UIImage imageNamed:@"Liked.png"] forState:UIControlStateSelected];
[sender setSelected:YES];
NSData *imageData = UIImageJPEGRepresentation(imageFile.image, 1);
[self uploadImage:imageData];
NSLog(@"Liked Image");
}
}
-(void)deleteImage:(NSData *)imageData {
PFQuery *query = [PFQuery queryWithClassName:@"UserLikedPhoto"];
[query whereKeyDoesNotExist:@"likedImage"];
[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (!object) {
NSLog(@"The getFirstObject request failed.");
} else {
NSLog(@"Successfully retrieved the object.");
[object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded && !error) {
NSLog(@"Image deleted from Parse");
} else {
NSLog(@"error: %@", error);
}
}];
}
}];
}
-(void)uploadImage:(NSData *)imageData {
PFFile *likedImage = [PFFile fileWithName:@"Image.jpg" data:imageData];
[likedImage saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!error) {
PFObject *userLikedPhoto = [PFObject objectWithClassName:@"UserLikedPhoto"];
[userLikedPhoto setObject:likedImage forKey:@"likedLook"];
userLikedPhoto.ACL = [PFACL ACLWithUser:[PFUser currentUser]];
PFUser *user = [PFUser currentUser];
[userLikedPhoto setObject:user forKey:@"User"];
[userLikedPhoto saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!error) {
NSLog(@"Saved");
} else {
NSLog(@"Error: %@%@", error, [error userInfo]);
}
}];
} else {
NSLog(@"Error: %@%@", error, [error userInfo]);
}
}];
}
答案 0 :(得分:1)
您可能希望更改deleteImage:
以接受objectId而不是NSData。你不能查询解析匹配的数据博客(无论如何,我很确定,这是不好的做法)。
-(void)deleteImage:(NSString *)objectId {
PFQuery *query = [PFQuery queryWithClassName:@"UserLikedPhoto"];
[query getObjectInBackgroundWithId:objectId block:^(PFObject *object, NSError *error) {
if (!object) {
NSLog(@"The getFirstObject request failed.");
} else {
NSLog(@"Successfully retrieved the object.");
[object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded && !error) {
NSLog(@"Image deleted from Parse");
} else {
NSLog(@"error: %@", error);
}
}];
}
}];
}
在这种情况下,您甚至不需要查询的whereKey过滤器,因为我们正在寻找特定的对象。您可以将objectId存储在upload image下的saveInBackgroundWithBlock成功块中。我希望有所帮助。
修改强>
来自Parse PFFile文档:
您可以使用REST删除对象引用的文件 API。您需要提供主密钥才能被允许 删除文件。
如果您的文件未被应用中的任何对象引用,则不是 可以通过REST API删除它们。你可以要求一个 清除应用程序“设置”页面中未使用的文件。请记住 这样做可能会破坏依赖于访问的功能 未引用的文件通过其URL属性。文件是 当前与对象关联的不会受到影响。
我从未使用过Parse文件,但这对我来说似乎很奇怪。您必须使用万能钥匙删除文件,因此我不建议您在iOS应用中执行此操作。如果您愿意,可以创建一个云代码功能来处理删除,或者您可以删除UserLikedPhoto对象并定期请求清理文件。