2011-12-07 11 views
0

これを理解しようとしていたのですが、postは、あるビューコントローラから他のビューコントローラにデータを転送する最良の方法です。iphoneデリゲートプロトコルでオブジェクトを保存できません

物事は、オブジェクトのattrを設定したい場合は、その作品はチャンピオンのようです。私はオブジェクト全体を設定しようとすると、それはそれをしません。

私のコードは次のとおりです。

@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)を取得クラス:AppDelegateに

@protocol AppDelegateProtocol 

    - (Lote*) theLoteAppObject; 

@end 

作品

-(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; 
    } 

そうに、しかし、私の場合追従をしたい、

theDataObject = [lotes objectAtIndex:[indexPax row]]; 

オブジェクトをDataObjectに保存しません。

これは悪いメモリ管理の問題ですか?

編集:それはtheDataObjectですか?appDelegateからの参照ですか?またはここに問題がありますか?これはあなたのLoteオブジェクトの独立した、保有のコピーを作成します

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

+0

あなたの配列のすべてのLoteアイテムがオートリリースされていると思います。あなたの '[lotes objectAtIndex:[indexPax row]];によって返されたオブジェクトが有効なLoteオブジェクトであるかどうかを確認し、有効なLoteオブジェクトであればそのオブジェクトの' copy'を行います。 –

+0

atm of objectAtIndex私はオブジェクトがすべての彼の情報と共にそこにあることを知ることができます。だから私は彼のコピーを作る必要があることをお勧めします。 newby質問、この状況でそれを行うための最善の方法? –

+0

私はメソッドのinitWithLoteを作成すると大丈夫ですか?(Lote *)LoteクラスのcopyLoteどこの深いコピーを作成するのですか? –

答えて

1

はこのような何かを試してみてください。終了したら(ARCを使用していない場合は)必ずリリースしてください。

+0

ARCは[自動参照カウント](http://clang.llvm.org/docs/AutomaticReferenceCounting.html)です。私は元の答えを修正して、さらに簡単なコードを表示しました。 「copyWithZone」セレクタエラーがまだ表示されている場合は、別のエラーが発生している可能性があります。 –

+0

私はコピーをしましたが、デリゲートでそのオブジェクトを探していたときには、nilが返されてappDelegateに設定されていませんでした:theDataObject._id = [[lotes objectAtIndex:[indexPax row]] _ id];私は他の何かをする必要はない?私はappDelegateのオブジェクトとアプリケーション全体を設定しましたか? –

+1

Michael、 'NSCopying'に準拠し、' copyWithZone: 'を実装する必要はありませんか? – jstevenco

関連する問題