实例没有存储价值

时间:2015-09-06 19:44:19

标签: ios objective-c arrays xcode instance

我有三个课程涉及这个问题:

  1. 我的appDelegate
  2. 我的数据类
  3. 我的viewcontroller类
  4. 当我的应用程序启动时,我在我的app委托中使用didFinishLaunchingWithOptions方法来创建数据类的实例,然后调用queryMessagesFromBackend方法来填充我的消息数组。

    然后在我的视图控制器中,我创建了我的数据类的另一个实例来访问我刚刚填充的messages数组(dataClass.messages),但它是空的。这没有意义,因为当调用该方法时,它会记录messages数组所具有的所有数据。为什么我的新实例显示messages数组为空?

    我会提供代码,但似乎无用

1 个答案:

答案 0 :(得分:0)

  1. 在你的" app delegate"首先制作数据类"反对" app delegate"
  2. 的ivar(或属性)
  3. 在app delegate class中为该数据对象声明一些getter。
  4. 在您的视图控制器中 - 通过共享的NSApp实例获取应用委托。
  5. 使用介绍的getter从app delegate获取共享数据对象。
  6. 提示:你可以使用界面(协议)来使事情变得更加清洁:

    @protocol XYZDataProvider <NSObject>
    - (XYZDataClass *) data;
    @end
    
    ...
    
    @interface XYZAppDelegate : NSAppDelegate <XYZDataProvider> {
        XYZDataClass *data;
    }
    
    @end
    
    ...
    
    @implementation XYZAppDelegate
    
    // either can init data in didFinishBlahBlahBlah...
    
    - (void) did ... {
        self->data = [XYZDataClass new];
        ...
    }
    
    // implement protocol's required method
    - (XYZDataClass *) data {
        /// and then return on request...
        return self->data;
    
        // or do so-caled lazy-loading:
    
        // if (!self->data) {
        //     $self->data = [... ..];
        //     ...
        // }
        // return self->data;
    }
    
    @end
    
    ...
    
    @implementation XYZViewController
    
    - (void) processData {
        NSAppDelegate *appDelegate = [NSApp delegate];
        if ([appDelegate conformsToProtocol:@protocol(XYZDataProvider)]) {
            XYZDataClass *data = [(id<XYZDataProvider>)appDelegate data];
    
            // do smth with data
            ...
    
        }
    
        ...    
    }
    
    @end
    

    注意:代码包含错误(直接在浏览器中编写...)