好的,我试图理解这个post关于将数据从一个视图控制器传输到另一个视图控制器的最佳方法。
事情是,如果我想设置一个对象的attr它的作用就像一个冠军。如果我尝试设置整个对象,它就不会这样做。我的代码是:
@protocol AppDelegateProtocol
- (Lote*) theLoteAppObject;
@end
在AppDelegate上:
@interface AgroferiaAppDelegate : NSObject <UIApplicationDelegate, AppDelegateProtocol> {
Lote *theLoteAppObject;
}
@property (nonatomic, retain) Lote *theLoteAppObject;
@end
...
...
- (id) init;
{
self.theLoteAppObject = [[Lote alloc] init];
[theLoteAppObject release];
return [super init];
}
我遇到问题的类(UIViewcontroller):
-(void)tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPax{
...
NSArray *lotes = [[self.evento lotesStore]allLotes] ;
Lote* theDataObject = [self theLoteAppObject];
theDataObject._id = [[lotes objectAtIndex:[indexPax row]]_id];
[[self navigationController]pushViewController:lotesOpViewController animated:YES];
}
- (Lote*) theLoteAppObject;{
id<AppDelegateProtocol> theDelegate = (id<AppDelegateProtocol>) [UIApplication sharedApplication].delegate;
Lote* theDataObject;
theDataObject = (Lote*) theDelegate.theLoteAppObject;
return theDataObject;
}
这样可行,但是如果我想进行followimg,
theDataObject = [lotes objectAtIndex:[indexPax row]];
它不会将对象保存在DataObject上。
这是一个记忆力不好的问题吗?
编辑:它是来自appDelegate的引用的DataObject吗?或者这是问题?
答案 0 :(得分:1)
尝试这样的事情:
if([indexPax row] < [lotes count])
{
Lotes * dataObjectToCopy = [lotes objectAtIndex: [indexPax row]];
if(dataObjectToCopy)
{
theDataObject = [dataObjectToCopy copy];
}
}
这将创建Lote
对象的单独保留副本。确保在完成后释放它(如果你没有使用ARC)。