parse.com需要来自其他表的图像

时间:2014-06-08 10:49:22

标签: ios xcode parse-platform relationship

这只是我应用的一部分,但我总是遇到同样的问题,它是这样的:

我在解析时有2个表:帖子和公司

发布这些字段

objectId
subject
companyId (object id of Company)

公司有这些字段

objectId
companyLogo

我制作了2个自定义类

**Post**
@property (nonatomic) UIImage *companyImage;
@property (nonatomic) NSString *objectId;
@property (nonatomic) NSString *subject;
@property (nonatomic) NSString *companyId;



**Company**
@property (nonatomic) PFile *companyLogo;
@property (nonatomic) UIImage *companyImage;
@property (nonatomic) NSString *objectId;

在单例类中,我创建了2个MutableArrays,这些MutableArrays填充了这两个自定义类。

我现在遇到的问题是如何从公司有效地获取companyLogo并将其放入Post图像。

1 个答案:

答案 0 :(得分:2)

这就是问题 - 你在邮政中保留公司的OBJECTID通常是错误的。

你应该只保留一个对象..Post中的列实际上可以是指向“公司”的指针。

以下是两个例子......

enter image description here

请注意,这个“Post”表实际上有一个USER作为列,我称之为“author:”。

enter image description here

这里的“评论”表有一个“作者”列,字面意思是“用户”而“relatedPost”又是一个指针列,它实际上是一个帖子。

(请注意,在Parse短划线中,它显示了您指向的对象的ID,非常方便。)

这是使用Parse的基础。首先,您需要返回并重新编写表格,以便在您的示例中,您的表格“Post”只包含指向公司的指针。

{脚注 - 在一些晦涩的情况下,在Parse中,你需要保留'实际'的objectID而不是项目本身,指针。这与此无关。}

所以,先解决这个问题。现在你问,当你收到帖子时,如何轻松获得“公司形象”。

这是关于Parse的核心惊人事情之一 - 它非常容易。这就是“包含”概念的用武之地。您的查询看起来像这样...

PFQuery *QQ = [PFQuery queryWithClassName:@"Posts"];
[QQ whereKey:@"subject" equalTo:"Farming"];
QQ.limit = 1000;
[QQ includeKey:@"author"];
QQ.cachePolicy = kPFCachePolicyCacheThenNetwork;
[QQ orderByDescending:@"createdAt"];

注意“includeKey”。

然后,假设你有“帖子”。你正在经历一个循环,每个帖子都是“onePost”。

当然,你可以这样做......

topic = [aPost objectForKey:@"topic"];
city = [aPost objectForKey:@"cityCode"];
state = [aPost objectForKey:@"state"];

等等。要获得整个公司的对象,你只需这样做......

PFObject *thatCompany = [aPost objectForKey:@"company"];

这就是为什么我们都使用Parse!

然后当然你可以从theCompany获得任何东西,比如图像

yourImage = [thatCompany objectForKey:@"companyImage"];

不要忘记这样做,你将转换你的表以使用实际指针列,如上所述。

请注意,指针列(在解析中你总是这样做,它们无处不在 - 你的大多数列都是指针列)在Parse.com上很好地解释,点击文档并在左键单击的iOS。

我希望这有帮助,因为写了很长时间:)干杯


仅供参考,这可能会对您有所帮助。这是将图像加载到UIImageView的正确方法。

@implementation UIImageView (Hexaface)

-(void)loadAvatarImage:(PFUser *)whom
// literally, for this UIImageView, set the user avatar image
  {
  if ( whom == nil ) return;

  PFFile *parseImageFile = [whom objectForKey:@"yourImageColumn"];

  __weak UIImageView *mySelf = self;
  if ( parseImageFile != nil )
    {
    [parseImageFile getDataInBackgroundWithBlock:^(NSData *result, NSError *error)
      {
      if ( error != nil ) { return; }
      UIImage *image = [UIImage imageWithData:result];

      mySelf.image = image;
      }];
    }
  else
    {
    NSLog(@"catastrophe, loadAvatarImage found no image ...............");
    }
  }

如果您是初学程序员且未使用类别,则(a)只需采用代码并在课堂上进行正常调用。或者,我强烈建议这是了解类别的绝佳机会。请记住,在iOS中,您始终不断地使用类别(如果您的代码大部分都是类别,则很多)。


注意我会向您提供一个非常有用的提示,用于处理iOS和Parse。有一个非常有用的库叫做......

DLImageLoader

在iOS中使用图像时,或多或少需要使用

,尤其是Parse。 DLImageLoader是您的解决方案。

https://stackoverflow.com/a/19115912/294884

那里有完整的工作实例。该库完全免费,抓取两个文件并使用它。希望它有所帮助。