我已经阅读了关于此的其他答案,起初我有一个(null)错误,但现在已经修复了。现在,每当我记录我在“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
以下是我的SelectTeacherTableViewController中的代码,我在其中合成收件人并通过方法向他们添加对象。 (代码缩短)
#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);
}
当我在此处记录收件人时,它们确实包含所有正确的值。但是,这是我的SendMessageViewController,我从SelectTeacherTableViewController传递数组:
SendMessageViewController.m(代码缩短):
#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);
}
在这里,当我记录收件人时,数组是空的。
我已经阅读了一些内容并遇到了一些解决方案,其中介绍了创建简单文件或使用AppDelegate存储全局变量的一些内容,但这些解决方案似乎都不适用于我。我有一种感觉,当我离开时,数据正在丢失。我的代码中有哪些地方出错了吗?我对Objective-C有点新意,这个问题一直困扰着我好几个小时。感谢。
如果您需要查看更多代码,请问我。感谢。
答案 0 :(得分:0)
这:SelectTeacherTableViewController *recipientList = [[SelectTeacherTableViewController alloc] init];
创建一个新对象。您添加到其他recipients
内的SelectTeacherTableViewController
数组中的任何内容都无关紧要。
如果您需要使用已添加到原始对象的信息,则必须传递对该对象的引用...而不是创建新对象。
答案 1 :(得分:0)
[[SelectTeacherTableViewController alloc] init]
没有为您提供现有收件人列表的引用,它会创建一个新的收件人列表。在面向对象的编程中,您可以使同一个类的多个实例不是同一个对象。
Class!= Object