应用程序的主要用户 - 最佳实施

时间:2014-02-06 22:24:22

标签: ios objective-c singleton uitabbarcontroller

我正在创建一个应用程序,它看起来像Twitter应用程序,UITabBarController + UINavigationController。

在我的应用中,我需要有一个主要用户(例如)和其他用户,以及共享相同结构的用户,即类。

对于一群普通用户,我没有看到问题 - 你创建用户对象,使用它,ARC完成它的工作。

我的问题是:保存您的数据的最佳方法是什么,在标签之间访问或传递它们(并且可以按照特定顺序选择标签)。

我已经阅读了很多有关此主题的问题,我可以使用:

  1. global var;
  2. 类方法(+);
  3. NSUserDefaults的;
  4. 但是,我不认为我真的知道对,最佳回答。

    修改 对不起,如果我写不清楚,我会尝试更好地解释。 当你启动应用程序时,你需要登录,登录后你可以与其他用户交谈,为他们做任务等。 我确实想要存储数据一个用户,因为当我在标签之间切换时,我需要知道我的身份和其他事情。但我接触过的其他用户在课堂设计方面实际上是相同的。他们都需要有姓名,头像,电子邮件等。

1 个答案:

答案 0 :(得分:0)

您的问题仍然有点模糊,因为您不清楚是否要求保存数据或将信息从一个视图(标签)传递到另一个视图。但我仍然认为我得到了你想做的事。

首先让我澄清你的建议,因为其中一些建议彼此完全无关:

  1. 全局变量;全局变量是一个变量,您可以从代码的任何部分,任何类,任何方法访问该变量。这在面向对象编程中非常沮丧,我认为这是一种不好的做法(除非你知道你在做什么)。
  2. 类方法(+);类方法只是一种不引用类的特定实例的方法。
  3. ;单例是一个允许自身只有一个实例的类。有几种实现方法,都有相同的原则。类方法(前面提到过)通常与单例一起用来管理它们。
  4. NSUserDefaults的;这可能是列表中最无关的。这是一个用于持久保存信息的类。例如,您可以在聊天中存储最近使用的表情符号列表。
  5. 设计应用程序的逻辑取决于您自己。但是,例如,使用ChatSystem对象就是一个例子。

    @interface ChatSystem...
    {
         User *you;
         NSArray *otherUsers;
    }
    

    如果你像这样设计你的聊天系统对象,你不需要任何单例,因为你总是被同一个变量引用。所有其他用户都存储在数组otherUsers中。 您可以跨视图(或选项卡)传递ChatSytem对象,并且您将始终知道哪一个是您,因为您将其引用为

    myChatSystem.you
    

    正如我之前所说,你的问题很模糊,但我希望这会对你有帮助。

    编辑: 如果只有一个登录用户(YOU),您可以使用单一用户进行管理。那里有数百个单身人士的例子,所以抓住其中任何一个。因此,访问YOU用户只需调用使用单例实例。在上面的例子中,它就像是。

    User *you; // Declared locally or in your class definition
    you = [User singletonLoggedInUserInstance]; // get the logged In user
    if (you)  // if user is valid, meaning there IS a logged in user
    {
        //... do something, initiate chat conversation....
    }
    

    另一方面,如果您不想使用单例,只需将用户对象声明为您将对该对象(或用户)执行某些操作的视图,选项卡或控制器的属性。例如,如果对象A创建用户,而对象B想要对该用户执行某些操作,则执行以下操作:

    @interface TabA
    @property.... User *user;
    @property ... TabB *tabB;
    @end
    
    - (void)passUserToTabB
    {
        self.tabB.user = self.user; //... pass user to Tab B
    }
    
    
    @interface TabB
    @property.... User *user;
    @end