在iOS应用程序中,我需要将一个对象从一个视图控制器传递到另一个视图控制器,然后切换到新的视图控制器。目标是简单地传递信息。但是,对象变为NULL
,并且在下一个视图出现时没有任何信息。什么?可能是原因?
以下是我的代码的一部分。
#pragma mark - Table view delegate
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
BIDCourse *course = self.courses[indexPath.row];
NSString *sub = course.subject;
BIDSubjectMainTwoViewController *subjectController=[[BIDSubjectMainTwoViewController alloc] init];
subjectController.title = sub;
subjectController.course=course;
[self.navigationController pushViewController:subjectController animated:YES];
}
BIDCourse *course
是NSObject
的自定义子类,它有一些NSStrings
,并且它不是nil,但是当我将它传递给下一个视图控制器时,它变为{{1} }。
答案 0 :(得分:1)
我遇到了像你这样的问题,当我将一个对象传递给另一个viewController时,它已被释放。
我认为这是ARC的缺陷,ARC认为您的subjectController
可能没用,所以它会释放subjectController
。将subjectController
作为属性,以便在将其传递给另一个viewController时不会释放。
如:
#pragma mark - Table view delegate
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
BIDCourse *course = self.courses[indexPath.row];
NSString *sub = course.subject;
_subjectController=[[BIDSubjectMainTwoViewController alloc] init];
_subjectController.title = sub;
_subjectController.course=course;
[self.navigationController pushViewController:_subjectController animated:YES];
}
答案 1 :(得分:0)
问题出在BIDSubjectMainTwoViewController.m?
subjectController.title = sub;
subjectController.course = course;
在BIDSubjectMainTwoViewController.m
文件中,您是否@synthesize您的属性?
@synthesize title = _title;
@synthesize course = _course;
您还可以将变量与init函数ala一起传递:
<强> BIDSubjectMainTwoViewController.h 强>
- (id)initWithTitle:(NSString *)title
andCourse:(BIDCourse *)course;
<强> BIDSubjectMainTwoViewController.m 强>
- (id)initWithTitle:(NSString *)title
andCourse:(BIDCourse *)course
{
self = [super init];
if (self) {
// Custom initialization
_title=title;
_course = course;
}
return self;
}
答案 2 :(得分:0)
我遇到了类似的行为。我的解决方案是制作一个对象的副本。对于你的情况:
BIDCourse *course = [self.courses[indexPath.row] copy];
并确保在BIDCourse .m fike中实现copyWithZone。
-(id)copyWithZone:(NSZone*) zone
答案 3 :(得分:0)
试试这个:
BIDSubjectMainTwoViewController.h
NSString *strTemp;
@property(nonatomic,retain) NSString *strTemp;
-(void) setValuestrTemp : (NSString *) str;
.m文件
@synthesize strTemp;
//写入setter方法
-(void) setValuestrTemp : (NSString *) str {
self.strTemp = str;
}
并在viewWillAppear中使用strTemp。
//现在使用它
BIDSubjectMainTwoViewController *subjectController=[[BIDSubjectMainTwoViewController alloc] init];
[subjectController setValuestrTemp:sub];
[self.navigationController pushViewController:_subjectController animated:YES];
答案 4 :(得分:0)
使用
NSString *sub = [course.subject copy];
subjectController.course=[course copy];
在BIDCourse
-(id)copyWithZone:(NSZone*) zone