这只是我应用的一部分,但我总是遇到同样的问题,它是这样的:
我在解析时有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图像。
答案 0 :(得分:2)
这就是问题 - 你在邮政中保留公司的OBJECTID通常是错误的。
你应该只保留一个对象..Post中的列实际上可以是指向“公司”的指针。
以下是两个例子......
请注意,这个“Post”表实际上有一个USER作为列,我称之为“author:”。
这里的“评论”表有一个“作者”列,字面意思是“用户”而“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。有一个非常有用的库叫做......
,尤其是Parse。 DLImageLoader是您的解决方案。
https://stackoverflow.com/a/19115912/294884
那里有完整的工作实例。该库完全免费,抓取两个文件并使用它。希望它有所帮助。