iphone委托协议无法保存对象

时间:2011-12-07 17:49:18

标签: iphone objective-c

好的,我试图理解这个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吗?或者这是问题?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

if([indexPax row] < [lotes count])
{
    Lotes * dataObjectToCopy = [lotes objectAtIndex: [indexPax row]];
    if(dataObjectToCopy)
    {
        theDataObject = [dataObjectToCopy copy];
    }
}

这将创建Lote对象的单独保留副本。确保在完成后释放它(如果你没有使用ARC)。