【问题标题】:Iphone Utility App Singleton ProblemIphone Utility App 单例问题
【发布时间】:2010-02-03 23:39:10
【问题描述】:

这让我在我的实用程序应用程序中感到烦恼:我有一个以此处指定的方式声明的单例:http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

我的单例有 4 个声明的属性:3 个浮点数和一个整数。现在,在我的视图控制器中,我在 updateSingleton 方法中设置了这样的属性:

[[Singleton sharedSingleton] setMyInt: var1];
[[Singleton sharedSingleton] setMyFloat1: var2];
[[Singleton sharedSingleton] setMyFloat2: var3];
[[Singleton sharedSingleton] setMyFloat3: var4];

在我的 viewDidLoad 方法中,我得到如下属性:

int m = [[Singleton sharedSingleton] myInt];

float r = [[Singleton sharedSingleton] myFloat1];
float g = [[Singleton sharedSingleton] myFloat2];
float b = [[Singleton sharedSingleton] myFloat3];

然后我将 int 值分配给 UISegmentedControl,将浮点值分配给 UISliders。所以问题是,每当我运行我的应用程序时,浮点数都会存储在单例中,直到我设置 int - 如果我设置浮点数,然后设置 int,每次调用 viewDidLoad 时浮点数总是重置为 0。所以顺序是:

1) 启动应用程序
2)翻转视图并设置浮动(r,g,b)
3) 将视图翻转回 Main
4)将视图翻转回 Flipside 并将浮动设置为先前的值。现在设置 int。
5) 转回 Main
6) 将视图翻转回 Flipside,int 设置为之前的值,但浮点数设置为 0

有什么想法吗?

【问题讨论】:

  • 更新单例方法什么时候调用?您能否提供有关该方法的更多详细信息?
  • 显示更多代码。问题很可能出在单例的创建中。

标签: iphone cocoa cocoa-touch singleton


【解决方案1】:

最简单的解释是你实际上并没有得到一个单例。尝试在每次使用之前记录[Singleton sharedSingleton]返回的对象,看看地址是否始终相同。

【讨论】:

  • 这也是我的猜测。只需在正确的位置忘记static 关键字,就很容易导致这样的错误。
【解决方案2】:

经过一些测试,我相信问题的出现是因为 UISegmentedControl selectedSegmentIndex 被重置为 IB 定义的选择,每次加载视图控制器时。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多