2013-09-22 3 views
0

Я использую parse.com. Я пытаюсь отобразить комментарии, но для того, чтобы получить комментарии, которые я должен получить PFObject от моего DetailViewController, но не возвращает PFObject к CommentsViewControllerВызов метода из другого класса не возвращается

EDIT

здесь весь код. Я новичок в 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 имеет значение nil и возвращается методом placeObject.

Вы определяете место как свойство

@property ... place 

Это дает вам переменную _pace член и две функции члена, place() и setPlace(place). Сам объект не выделен для вас. Выделите объект в своей init функции, избавитесь от placeObject(), замените его на object.place.

+0

Место проходит через предыдущий вид в методе prepareForSegue – david2391

+0

Нет кода, который присваивает значение для размещения свойства. – dmitri

+0

Я вижу, что ты говоришь сейчас, и я не думаю, что это сработает. Поскольку commentInstance = [[DetailViewController alloc] init]; создает новый экземпляр, но DetailViewController получает место PFObject с главной страницы через segue. Таким образом, он никогда не будет иметь pfobject, если я создам новый экземпляр DetailViewController. Есть ли способ, которым я могу передать место в CommentViewController, или просто удалить его и создать tableView внутри DetailViewController? – david2391

0

Я избавился от всего этого, и в моем DetailViewController я добавил [test placeSet: place] в свой метод viewDidLoad. Затем в CommentsViewController я сделал ...

- (void)placeSet:(PFObject *)object{ 
    place = object; 
    NSLog(@"place = %@", place); 
} 
Смежные вопросы