【问题标题】:Display data in other view controllers [duplicate]在其他视图控制器中显示数据 [重复]
【发布时间】:2015-04-24 22:13:09
【问题描述】:

在我的故事板中,我设置了一个 Facebook 登录,用于获取用户用户名和个人资料图片。我在初始 UIViewController(又名 LoginViewController)中完成了这一切。

想要做的是能够将此数据(用户名和个人资料图片)发送到其他地方。更具体地说,我希望能够:

  • 不同 UIViewController 中的 UIImageView 中显示获取的个人资料图片
  • 在另一个 UIViewController 的另一个文本字段中显示用户名

如果有人可以通过代码示例甚至故事板演练简单地告诉我如何做到这一点,我将非常感激。

【问题讨论】:

    标签: ios objective-c xcode facebook uiviewcontroller


    【解决方案1】:

    使用 NSUserDefaults 保存您在 LoginViewController 中检索到的详细信息。它是系统提供的方便存储,可提供类似 NSDictionary 的访问权限。然后您可以从其他控制器检索详细信息。

    从 LoginViewController 保存,

    [[NSUserDefaults standardUserDefaults] setObject:@"user1" forKey:@"username"] ;
    [[NSUserDefaults standardUserDefaults] setObject:UIImageJPEGRepresentation(image, 1.0) forKey:@"picture"] ;
    

    要从另一个视图控制器中检索,

    NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"] ;
    UIImage *image = [UIImage imageWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"picture"]] ;
    

    【讨论】:

    • 这是个糟糕的主意。绝对不要使用 NSUserDefaults 在您的应用程序中传递数据。它应该用于在应用启动和更新之间保存数据。
    • 它旨在在应用启动之间保存数据,我希望用户名和头像在应用启动之间有用.. :)。这是一种存储数据的便捷方式,它也是线程安全的,并且对于在 NSUserDefaults 中保存什么没有硬性规定。也不影响性能,是什么问题?
    • 这会存储数据然后读取它。这与 OP 要求的在视图控制器之间传递数据不同。如果您在同一会话中使用此模式在您的应用程序中传递数据,那么您做错了。 NSUserDefaults 应该只用于您希望在应用会话之间存储的数据。
    • 是的,我们必须使用设计模式将信息从一个控制器传递到另一个控制器,但我们可能必须先将这些细节保存在某个地方,因为我们可能会在稍后启动另一个视图控制器,对。??。当然,您始终可以选择 NSFileManger 和 NSUserDefaults 来保存数据。
    • 只有您想在应用程序启动/更新之间保留的内容应该与 NSUserDefaults 一起存储(OP 对此没有任何说明)。我在上面链接的重复问题中描述了在 one 会话期间在一个应用中传递数据的推荐模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多