从另一个类调用方法不会返回

时间:2013-09-22 02:59:29

标签: objective-c methods return parse-platform

我正在使用parse.com。我正在尝试显示注释,但为了获得注释,我必须从我的DetailViewController获取PFObject,但它不会将PFObject返回到CommentsViewController

修改

这里是所有代码。我是客观c的新手,所以我可能做了一些愚蠢的事情

CommentsView Controller

#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

2 个答案:

答案 0 :(得分:0)

我看不到你在哪里分配place个对象。您拨打init,然后尝试检索place。它应该返回零。这是你的代码:

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

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

您将地点定义为属性

@property ... place

它为您提供了一个成员变量_pace和两个成员函数place()setPlace(place)。对象本身不是为您分配的。 在init函数中分配地点对象,摆脱placeObject(),将其替换为object.place来电。

答案 1 :(得分:0)

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

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