お互いのデリゲートである 2 つのコントローラーがあり、ARC を使用しています。最初のコントローラは、データベースからモデル オブジェクトの NSMutableArray を取得し、他のオブジェクトが使用できるようにそれらを保持します。オブジェクトが正しく取得されていることを確認するためにテストしました。
2 番目のコントローラーは、さらに処理するために最初のコントローラーからモデル配列を取得することになっていますが、その間にモデルが消失することがよくあります。最初のコントローラーでこれを設定しました:
@interface FirstController : NSObject {
NSMutableArray *modelArray;
@end
@property (nonatomic, copy) NSMutableArray *modelArray; //I also tried (strong).
@implementation
- (void)awakeFromNib {
modelArray = [[NSMutableArray alloc]initWithCapacity:1];
[modelArray addObjectsFromArray:[delegate MySQLQuery:@"SELECT * FROM reports" forModelObjects:@"Report"]]; //Delegate here refers to a third controller
NSLog(@"FirstController: %ld", [modelArray count]); //Everything OK here
}
@synthesize modelArray;
しかし、2 番目のコントローラーでこれを呼び出すと、次のようになります。
NSMutableArray *newArray = [[NSMutableArray alloc]initWithCapacity:1];
newArray = [delegate modelArray]; // Delegate here refers to FirstController
NSLog(@"SecondController: %@", newArray);
ほとんどの場合、出力は次のようになります (ただし、動作する場合もあります)。
FirstController: 28
SecondController: (null)
ARCがFirstControllerでmodelArrayの割り当てを解除しているように見えますが、それを止める方法はありません。私は何を間違っていますか?