【问题标题】:UISwitch ViewDidLoad set OnUISwitch ViewDidLoad 设置为 On
【发布时间】:2011-08-16 12:28:09
【问题描述】:

我有一个 UISwitch,它在 CoreData 中将 BOOL 设置为 1 或 0。但是,当用户使用 Switch 加载视图时,核心数据会识别出 Switch 设置为 1(打开)但仍显示关闭。这是下面的代码。注意:当您进入和退出应用程序时,开关会正确显示,但如果您关闭手机,或者停止并启动iPhone模拟器,它会显示。有人可以帮忙吗?

"setSwtich" 是 UISwitch 上的方法,"list" 是 UISwitch 的名称,"indicator" 是存储 BOOL 的核心数据事件属性。

-(IBAction)setSwitch
{
    if (list.on) 
    {
        [event setIndicator:[NSNumber numberWithInt:1]];
        NSError *error;
        if (![managedObjectContext save:&error]) 
        {
            NSLog(@"there was an error in Save");
        }
    }
    else [event setIndicator:[NSNumber numberWithInt:0]];
    NSError *error;
    if (![managedObjectContext save:&error]) 
    {
        NSLog(@"there was an error in Save");
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (event.indicator == [NSNumber numberWithInt:1]) {
        [list setOn:YES animated:NO];
    }
    else nil;
}

-(void)viewDidAppear:(BOOL)animated
{
    if (event.indicator == [NSNumber numberWithInt:1]) {
        [list setOn:YES animated:NO];
    }
}

- (void)viewDidUnload
{
    if (list.on) {
        [event setIndicator:[NSNumber numberWithInt:1]];
    }
    NSError *error;
    if (![managedObjectContext save:&error]) 
    {
        NSLog(@"there was an error in Save");
    }
    [super viewDidUnload];

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
-(void)viewDidDisappear:(BOOL)animated
{
    if (list.on) {
        [event setIndicator:[NSNumber numberWithInt:1]];
    }
    NSError *error;
    if (![managedObjectContext save:&error]) 
    {
        NSLog(@"there was an error in Save");
    }
}

【问题讨论】:

  • 另外,为了清楚起见,我知道核心数据元素正在被正确记录和存储;创建列表指示器的效果正在起作用,它纯粹是在开关上显示 ON/OFF这就是问题所在。

标签: iphone core-data viewdidload uiswitch


【解决方案1】:

也许这只是你使用==的方式。试试Apple定义的比较:

isEqualToNumber:

Returns a Boolean value that indicates whether the receiver and a given number are equal.
- (BOOL)isEqualToNumber:(NSNumber *)aNumber
Parameters

aNumber

    The number with which to compare the receiver.

Return Value

YES if the receiver and aNumber are equal, otherwise NO.
Discussion

Two NSNumber objects are considered equal if they have the same id values or if they have equivalent values (as determined by the compare: method).

This method is more efficient than compare: if you know the two objects are numbers.

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多