Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 使用ARC时在控制器之间丢失模型_Cocoa_Delegates_Automatic Ref Counting - Fatal编程技术网

Cocoa 使用ARC时在控制器之间丢失模型

Cocoa 使用ARC时在控制器之间丢失模型,cocoa,delegates,automatic-ref-counting,Cocoa,Delegates,Automatic Ref Counting,我有两个控制器,它们是彼此的代理,我使用的是ARC。第一个控制器从数据库检索模型对象的NSMutableArray,然后保存它们以供其他对象使用。我已经进行了测试,以确保它能够正确地检索对象 第二个控制器应该从第一个控制器获取模型数组以进行进一步处理,但模型往往同时消失。我在第一个控制器中设置: @interface FirstController : NSObject { NSMutableArray *modelArray; @end @property (nonatomic, c

我有两个控制器,它们是彼此的代理,我使用的是ARC。第一个控制器从数据库检索模型对象的NSMutableArray,然后保存它们以供其他对象使用。我已经进行了测试,以确保它能够正确地检索对象

第二个控制器应该从第一个控制器获取模型数组以进行进一步处理,但模型往往同时消失。我在第一个控制器中设置:

@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;
    NSMutableArray *newArray = [[NSMutableArray alloc]initWithCapacity:1];
    newArray = [delegate modelArray]; // Delegate here refers to FirstController
    NSLog(@"SecondController: %@", newArray); 
但是当我在第二个控制器中调用这个时:

@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;
    NSMutableArray *newArray = [[NSMutableArray alloc]initWithCapacity:1];
    newArray = [delegate modelArray]; // Delegate here refers to FirstController
    NSLog(@"SecondController: %@", newArray); 
大多数情况下,输出如下所示(尽管偶尔也能正常工作):


在我看来,ARC正在解除FirstController中modelArray的分配,但我不知道如何阻止它。我做错了什么?

我还没有详细阅读您的问题,所以我不打算发布答案,但您确实不应该初始化newArray,然后立即将其设置为其他内容。你只是马上扔掉了你创建的可变数组。我敢打赌你忘了设置委托。向nil发送任何消息都返回nil。这可以解释你看到的行为。vikingosegundo,你是对的。代表就是问题所在。谢谢