Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从解析查询访问NSArray out 在我的查询中, NSCORNOW/COD>很好地写出了好的东西 NSCOLL(@“DANS MSG EnvyA[Audio:%@”),NSArray消息< /C> >,但是在 VIEWDIDLoad 中的查询我不能访问我的代码>“< < /P>”的值。 NSLog(@"DESTINATEUR MSG : %@", self.senderMsg); NSLog(@"EN DEHORS QUERY : %@", self.messages);_Ios_Parse Platform_Nsarray_Chat_Pfquery - Fatal编程技术网

Ios 从解析查询访问NSArray out 在我的查询中, NSCORNOW/COD>很好地写出了好的东西 NSCOLL(@“DANS MSG EnvyA[Audio:%@”),NSArray消息< /C> >,但是在 VIEWDIDLoad 中的查询我不能访问我的代码>“< < /P>”的值。 NSLog(@"DESTINATEUR MSG : %@", self.senderMsg); NSLog(@"EN DEHORS QUERY : %@", self.messages);

Ios 从解析查询访问NSArray out 在我的查询中, NSCORNOW/COD>很好地写出了好的东西 NSCOLL(@“DANS MSG EnvyA[Audio:%@”),NSArray消息< /C> >,但是在 VIEWDIDLoad 中的查询我不能访问我的代码>“< < /P>”的值。 NSLog(@"DESTINATEUR MSG : %@", self.senderMsg); NSLog(@"EN DEHORS QUERY : %@", self.messages);,ios,parse-platform,nsarray,chat,pfquery,Ios,Parse Platform,Nsarray,Chat,Pfquery,我必须实现@synthesis吗?我做错了什么 这是我的密码 ChatViewController.h: #import "MessagesViewController.h" @interface ChatViewController : MessagesViewController @property (strong, nonatomic) NSMutableArray *messages; @property (strong, nonatomic) NSString *destinate

我必须实现@synthesis吗?我做错了什么

这是我的密码

ChatViewController.h:

#import "MessagesViewController.h"

@interface ChatViewController : MessagesViewController

@property (strong, nonatomic) NSMutableArray *messages;
@property (strong, nonatomic) NSString *destinateurChat;
@property (strong, nonatomic) NSArray *senderMsg;
@property (strong, nonatomic) NSArray *destinateurMsg;

@end
ChatViewController.m:

#import "ChatViewController.h"
#import <Parse/Parse.h>
#import "SVProgressHUD.h"

@interface ChatViewController ()

@end
id message;
NSDate *receiveDate;
NSString *text;
@implementation ChatViewController
@synthesize destinateurMsg = _destinateurMsg;
@synthesize messages = _messages;

#pragma mark - View lifecycle
- (void)viewDidLoad
{

    [super viewDidLoad];
    self.title = @"Messages";
    PFQuery *query1 = [PFQuery queryWithClassName:@"Chat"];
    [query1 whereKey:@"DestinateurId" equalTo:self.destinateurChat];
    [query1 whereKey:@"senderId" equalTo:[[PFUser currentUser] objectId]];
    PFQuery *query2 = [PFQuery queryWithClassName:@"Chat"];
    [query2 whereKey:@"DestinateurId" equalTo:[[PFUser currentUser] objectId]];
    [query2 whereKey:@"senderId" equalTo:self.destinateurChat];
   // PFQuery *hotelQuery = [PFQuery orQueryWithSubqueries:@[query1, query2]];

    //Message envoyé par l'user
    [query1 findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            _senderMsg = [objects valueForKey:@"text"];
            _messages = [[NSMutableArray alloc] init];
            [_messages addObjectsFromArray:_senderMsg];
            NSLog(@"DANS MSG ENVOYE PAR USER : %@", _messages);

    //Messages destiné à l'user
            [query2 findObjectsInBackgroundWithBlock:^(NSArray *objects2, NSError *error) {
                if (!error) {
                    self.destinateurMsg = objects2;
                    [self.messages addObjectsFromArray:self.destinateurMsg];
                } else {
                    // Log details of the failure
                    NSLog(@"Error: %@ %@", error, [error userInfo]);
                }
            }];
        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];


    NSLog(@"DESTINATEUR MSG : %@", self.senderMsg);
    NSLog(@"EN DEHORS QUERY : %@", self.messages);
    UIButton *exitButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [exitButton addTarget:self action:@selector(backToInboxView) forControlEvents:UIControlEventTouchUpInside];
    [exitButton setTitle:@"Inbox" forState:UIControlStateNormal];
    exitButton.frame = CGRectMake(0.0, 0.0, 60, 60);
    [self.view addSubview:exitButton];

   }
#导入“ChatViewController.h”
#进口
#导入“SVProgressHUD.h”
@接口ChatViewController()
@结束
身份信息;
NSDate*接收日期;
NSString*文本;
@ChatViewController的实现
@合成destinateurMsg=_destinateurMsg;
@合成消息=_消息;
#pragma标记-视图生命周期
-(无效)viewDidLoad
{
[超级视图下载];
self.title=@“消息”;
PFQuery*query1=[pfqueryquerywithclassname:@“Chat”];
[查询1 whereKey:@“DestinateurId”等于:self.destinateurChat];
[query1 whereKey:@“senderId”等于:[[PFUser currentUser]objectId];
PFQuery*query2=[pfqueryquerywithclassname:@“Chat”];
[query2 whereKey:@“DestinateurId”等于:[[PFUser currentUser]objectId];
[查询2 whereKey:@“senderId”等于:self.destinateurChat];
//PFQuery*hotelQuery=[PFQuery或QueryWithSubQueries:@[query1,query2]];
/信息特使
[query1 findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误){
如果(!错误){
_senderMsg=[objects valueForKey:@“text”];
_messages=[[NSMutableArray alloc]init];
[_messagesaddobjectsFromarray:_senderMsg];
NSLog(@“DANS MSG Envayer-Par用户:%@”,“消息”);
//发送给用户的消息
[query2 FindObjectsInBackgroundithBlock:^(NSArray*objects2,NSError*error){
如果(!错误){
self.destinateurMsg=objects2;
[self.messages addObjectsFromArray:self.destinateurMsg];
}否则{
//记录故障的详细信息
NSLog(@“Error:%@”,Error,[Error userInfo]);
}
}];
}否则{
//记录故障的详细信息
NSLog(@“Error:%@”,Error,[Error userInfo]);
}
}];
NSLog(@“目的地消息:%@”,self.senderMsg);
NSLog(@“EN DEHORS QUERY:%@”,self.messages);
UIButton*exitButton=[UIButton Button类型:UIButtonyPeroundRect];
[exitButton addTarget:self action:@selector(BackToInBox视图)for ControlEvents:UIControlEventTouchUpInside];
[退出按钮设置标题:@“收件箱”状态:UIControlStateNormal];
exitButton.frame=CGRectMake(0.0,0.0,60,60);
[self.view addSubview:exitButton];
}

您无法访问这些行中的
self.senderMsg
self.messages

NSLog(@"DESTINATEUR MSG : %@", self.senderMsg);
NSLog(@"EN DEHORS QUERY : %@", self.messages);
因为它是在异步请求完成之前执行的。

[query1 findObjectsInBackgroundWithBlock:
是一个异步函数,在后台线程中执行。调用这些函数后,viewDidLoad内部的执行将继续到函数的结尾。此时,NSLog中的数组将为空

如果要使用数组的值,请在findObjectsInBackgroundWithBlock中使用它

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
       // You can use it in this block.
       // Reload Data here like [self.tableView reloadData]
  }
}]

可能是因为它是异步的吗?@Larme谢谢你的回复。那么我该怎么办?我无法从此查询中访问此NSArray?你是否收到任何错误或“self.senderMsg”没有打印数组包含的内容?@Nimishappel否,0错误,只是NSArray为null。好的,我理解它为什么不工作。但是,没有办法在findObjects中使用它InBackgroundithBlock?因为我必须在其他方法中使用它:-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{return self.messages.count;}和-(NSString*)textForRowAtIndexPath:(NSIndexPath*)indexPath{return[self.messages ObjectAtIndeXat:indexPath.row];}调用
[self.tableview重载数据]
[query2 findObjectsInBackgroundWithBlock]内
。在后台查找对象只允许您在完成块分配完值后使用这些值。当您告诉某个对象在后台执行时,它会被转移到另一个线程,原始进程会立即继续执行。因此,您的值尚未分配到您尝试执行的位置使用它们。当您的完成块被调用时,这是您的通知,表示这些值已填充并可供使用——请更改您的控制流,使其仅在发生这种情况后使用。@rakeshbs Yeahh,太好了!谢谢!