2013-09-22 40 views
0

我正在使用parse.com。我想显示评论,但为了得到我需要从我的DetailViewController得到PFObject的意见,但它不PFObject返回CommentsViewController调用另一个类的方法不会返回

编辑

这里是所有的代码。我是新来的Objective C的,所以我可能做一些愚蠢的

CommentsView控制器

#import "CommentsViewController.h" 
#import "DetailViewController.h" 
#import "CommentsCell.h" 

@interface CommentsViewController(){ 
    NSArray *commentsArray; 
    id commentInstance; 
} 

@end 

@implementation CommentsViewController 




- (id)init { 
    if (self = [super init]) { 
     [self performSelector:@selector(commentsQuery)]; 
    } 
    return self; 
} 







- (void)commentsQuery { 

    commentInstance = [[DetailViewController alloc] init]; 

    PFObject *tempObj = [commentInstance placeObject]; 
    PFQuery *query1 = [PFQuery queryWithClassName:@"activity"]; 
    [query1 whereKey:@"type" equalTo:@"comment"]; 
    [query1 whereKey:@"place" equalTo:[NSString stringWithFormat:@"%@", [tempObj objectId]]]; 
    NSLog(@"%@", tempObj); 
    [query1 orderByDescending:@"createdAt"]; 
    [query1 findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (!error){ 
      commentsArray = [[NSArray alloc]initWithArray:objects]; 
      NSLog(@"%lu", (unsigned long)[commentsArray count]); 
     } 
    }]; 
} 



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    CommentsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) { 
     cell = [[CommentsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    PFObject *placeObj = [commentInstance placeObject]; 
    cell.username.text = @"test"; 
    return cell; 
} 


@end 

DetailsViewCOntroller

#import "DetailViewController.h" 
#import "CommentsViewController.h" 

@interface DetailViewController(){ 

    CommentsViewController *test; 
} 

@end 

@implementation DetailViewController 

@synthesize place; 
@synthesize userPhoto, message, username, checkCount, photo, scroller, commentsTableView; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    test = [[CommentsViewController alloc] init]; 
    self.commentsTableView.delegate = test; 
    self.commentsTableView.dataSource = test; 



    //Adjust the message label box height 
    CGSize textSize = [[place objectForKey:@"message"] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(201, CGFLOAT_MAX) lineBreakMode: NSLineBreakByWordWrapping]; 




    userPhoto.file = [place objectForKey:@"thumbnail"]; 
    [userPhoto loadInBackground]; 

    username.text = [place objectForKey:@"username"]; 
    message.text = [place objectForKey:@"message"]; 
    checkCount.text = [NSString stringWithFormat:@"%@", [place objectForKey:@"checkMarkCount"]]; 
    [message sizeToFit]; 
    if ([place objectForKey:@"photo"] != Nil){ 
     photo.file = [place objectForKey:@"photo"]; 
     [photo loadInBackground]; 
     //[photo sizeToFit]; 
     photo.frame = CGRectMake(6, textSize.height + 50, photo.frame.size.width, photo.frame.size.height); 

     float sizeOfContent = 0; 
     UIView *lLast = [scroller.subviews lastObject]; 
     NSInteger wd = lLast.frame.origin.y; 
     NSInteger ht = lLast.frame.size.height; 
     NSLog(@"%@", lLast); 

     sizeOfContent = wd+ht; 
     scroller.contentSize = CGSizeMake(scroller.frame.size.width, sizeOfContent+100); 
    } 
    else{ 

     float sizeOfContent = 0; 
     UIView *lLast = [scroller.subviews lastObject]; 
     NSInteger wd = lLast.frame.origin.y; 
     NSInteger ht = lLast.frame.size.height; 
     NSLog(@"%@", lLast); 

     sizeOfContent = wd+ht; 
     scroller.contentSize = CGSizeMake(scroller.frame.size.width, sizeOfContent+100); 

    } 







} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)checkMarkButton:(UIButton *)sender { 
} 




- (PFObject *)placeObject{ 
    return place; 
} 
@end 
+0

你有'DetailViewController :: init'函数吗?它有什么作用?你的'placeObject'函数是多余的,它重复了'property place'。你也不需要'合成地点'指令,编译器就是这样做的。 – dmitri

回答

0

我没有看到你分配place对象。您致电init,然后尝试检索place。它应该返回零。这里是你的代码:

commentInstance = [[DetailViewController alloc] init]; 
PFObject *tempObj = [commentInstance placeObject]; 

commentInstance是一个新的对象。在DetailViewController中没有定义init函数,因此commentInstance.place为零,并且由placeObject方法返回。

您定义的地方作为一个属性

@property ... place 

这就给了你一个成员变量_pace和两个成员函数,place()setPlace(place)。该对象本身并未分配给您。 在你的init函数中分配放置对象,摆脱placeObject(),用object.place调用替换它。

+0

placeFor正在从prepareForSegue方法的前一视图中传递 – david2391

+0

没有代码将值赋给放置属性。 – dmitri

+0

我明白你现在说什么,我不认为它会起作用。因为commentInstance = [[DetailViewController alloc] init];正在创建新实例,但DetailViewController通过segue从主页获取PFObject位置。所以如果我创建一个DetailViewController的新实例,它永远不会有pfobject。有什么办法,我可以传递到CommentsViewController的地方,或者我应该删除它,并在DetailViewController内创建tableView? – david2391

0

我摆脱了所有这一切,并在我的DetailViewController中添加了[test placeSet:place]在我的viewDidLoad方法中。然后在CommentsViewController中,我做了...

- (void)placeSet:(PFObject *)object{ 
    place = object; 
    NSLog(@"place = %@", place); 
} 
相关问题