Ios 将NSMutableArray传递给其他类将返回空数组

Ios 将NSMutableArray传递给其他类将返回空数组,ios,objective-c,arrays,Ios,Objective C,Arrays,我读过关于这个问题的其他答案,起初我有一个(空)错误,但现在已经修复了。现在,每当我记录在“SelectTeacherTableViewController.h”中创建并传递给SendMessageViewController类的NSMutableArray时,它都会创建一个数组,但它是空的 以下是我的SelectTeacherTableViewController.h中的代码 #import <UIKit/UIKit.h> @interface SelectTeacherTabl

我读过关于这个问题的其他答案,起初我有一个(空)错误,但现在已经修复了。现在,每当我记录在“SelectTeacherTableViewController.h”中创建并传递给SendMessageViewController类的NSMutableArray时,它都会创建一个数组,但它是空的

以下是我的SelectTeacherTableViewController.h中的代码

#import <UIKit/UIKit.h>

@interface SelectTeacherTableViewController :
UITableViewController
{
    NSMutableArray *recipients;
}

@property (strong, nonatomic) NSArray *teachers;
@property (strong, nonatomic) NSMutableArray *recipients;

@end
#导入
@界面选择TeacherTableViewController:
表格控制器
{
NSMutableArray*收件人;
}
@属性(强、非原子)NSArray*教师;
@属性(强,非原子)NSMutableArray*收件人;
@结束
下面是我的SelectTeacherTableViewController中的代码,在这里我合成了收件人,并通过一个方法向他们添加对象。(代码缩短)

#导入“ParseStarterProjectAppDelegate.h”
#导入“SelectTeacherTableViewController.h”
#进口
@界面选择TeacherTableViewController()
@结束
@实现SelectTeacherTableViewController
@综合受体;
-(无效)viewDidLoad
{
[超级视图下载];
self.title=@“消息”;
self.recipients=[[NSMutableArray alloc]init];
[PFUser logInWithUsername:@“awesome”密码:@“password”];
NSString*getCurrentUserSchoolKey=[[PFUser currentUser]objectForKey:@“schoolKey]”;
NSString*currentUserSchoolKey=[NSString stringWithFormat:@“%@”,getCurrentUserSchoolKey];
PFQuery*queryfortechers=[PFUser query];
[QueryForTech orderByAscending:@“用户名”];
[查询教师,其中键:@“角色”等同于:@“教师”];
[queryfortachers其中key:@“schoolKey”等于:currentUserSchoolKey];
[QueryForTech findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误){
如果(错误){
NSLog(@“%@%@”,错误,[error userInfo]);
}
否则{
自我教师=对象;
NSLog(currentUserSchoolKey);
[self.tableView重载数据];
}
}];
}
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath{
self.recipients=[[NSMutableArray alloc]init];
[self.tableView取消rowatinexpath:indexath:NO];
UITableViewCell*cell=[self.tableView cellForRowAtIndexPath:indexPath];
PFUser*user=[self.objectAtIndex:indexath.row];
if(cell.accessoryType==UITableViewCellAccessoryNone){
cell.accessoryType=UITableViewCellAccessoryCheckmark;
[收件人addObject:user.objectId];
}
否则{
cell.accessoryType=UITableViewCellAccessoryNone;
[收件人移除对象:user.objectId];
}
NSLog(@“%@”,收件人);
}
当我在这里记录收件人时,它们确实包含所有正确的值。但是,这是我的SendMessageViewController,我从SelectTeacherTableViewController传递数组:

SendMessageViewController.m(代码缩短):

#导入“SendMessageViewController.h”
#进口
#进口
#导入“SelectTeacherTableViewController.h”
@接口SendMessageViewController()
@结束
@SendMessageViewController的实现
-(无效)viewDidLoad
{
[超级视图下载];
SelectTeacherTableViewController*recipientList=[[SelectTeacherTableViewController alloc]init];
NSMutableArray*recipients=[[NSMutableArray alloc]initWithArray:recipientList.recipients];
NSLog(@“%@”,收件人列表);
}
在这里,当我记录收件人时,数组是空的

我读了一些关于它的书,遇到了一些解决方案,其中提到了创建simpleton文件,或者使用AppDelegate来存储全局变量,但是这些解决方案似乎都不适合我。我有一种感觉,当我离开时,数据正在丢失。我的代码中是否有错误的地方?我对Objective-C有点陌生,这个问题困扰了我好几个小时。谢谢


如果你需要看更多的代码,就问我。谢谢。

此:
选择TeacherTableViewController*接收者列表=[[SelectTeacherTableViewController alloc]init]创建一个新对象。任何添加到其他
SelectTeacherTableViewController
中的
recipients
数组中的内容都是无关的


如果需要使用添加到原始对象中的信息,则必须传递对该对象的引用…而不是创建新对象。

[[SelectTeacherTableViewController alloc]init]
不会提供对现有收件人列表的引用,而是创建一个新的收件人列表。在面向对象编程中,同一类的多个实例可以不是同一个对象


类!=对象

下面的两个答案都是正确的,您只需创建控制器的新实例。请看这个,你的问题有一些答案。那么我应该使用prepareForSegue通过一个序列传递数据吗?啊!非常感谢你!终于做到了!不传入数据,而是传递对数据的引用。我希望你能理解其中的细微差别。
#import "ParseStarterProjectAppDelegate.h"
#import "SelectTeacherTableViewController.h"
#import <Parse/Parse.h>

@interface SelectTeacherTableViewController ()

@end

@implementation SelectTeacherTableViewController
@synthesize recipients;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Message";
    self.recipients = [[NSMutableArray alloc] init];
    [PFUser logInWithUsername:@"awesome" password:@"password"];
    NSString *getCurrentUserSchoolKey = [[PFUser currentUser] objectForKey:@"schoolKey"];
    NSString *currentUserSchoolKey = [NSString stringWithFormat:@"%@", getCurrentUserSchoolKey];
    PFQuery *queryForTeachers = [PFUser query];
    [queryForTeachers orderByAscending: @"username"];
    [queryForTeachers whereKey: @"role" equalTo:@"Teacher"];
    [queryForTeachers whereKey:@"schoolKey" equalTo:currentUserSchoolKey];
    [queryForTeachers findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (error) {
        NSLog(@"%@ %@", error, [error userInfo]);
    }
    else {
        self.teachers = objects;
        NSLog(currentUserSchoolKey);
        [self.tableView reloadData];
    }
}];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.recipients = [[NSMutableArray alloc] init];
    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    PFUser *user = [self.teachers objectAtIndex:indexPath.row];

if (cell.accessoryType == UITableViewCellAccessoryNone) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [recipients addObject:user.objectId];
}
else {
    cell.accessoryType = UITableViewCellAccessoryNone;
    [recipients removeObject:user.objectId];
}

NSLog(@"%@", recipients);
}
#import "SendMessageViewController.h"
#import <Parse/Parse.h>
#import <MobileCoreServices/UTCoreTypes.h>
#import "SelectTeacherTableViewController.h"

@interface SendMessageViewController ()
@end

@implementation SendMessageViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    SelectTeacherTableViewController *recipientList = [[SelectTeacherTableViewController alloc] init];
    NSMutableArray *recipients = [[NSMutableArray alloc] initWithArray:recipientList.recipients];
    NSLog(@"%@", recipientList);
}