2011-12-06 88 views
0
UITextField *textField; 
UISwitch *someSwitch; 

NSManagedObject *editedObject; 
NSString *editedFieldKey; 
NSString *editedFieldName; 


NSString *z=[NSString stringWithFormat:@"%@",[editedObject valueForKey:editedFieldKey]];  
    NSString *y=[NSString stringWithFormat:@"b"]; 
    if(z==y){ 
     [someSwitch setOn:YES animated:YES]; 
    } 
    else{[someSwitch setOn:NO animated:YES];} 

-(IBAction) toggleButtonPressed{ 

NSString *a=[NSString stringWithFormat:@"a"]; 
NSString *b=[NSString stringWithFormat:@"b"]; 

if(someSwitch.on){ 

    [editedObject setValue:b forKey:editedFieldKey]; 
} 
else{ 

    [editedObject setValue:a forKey:editedFieldKey]; 

} 
} 

-(IBAction)save { 

NSUndoManager * undoManager = [[editedObject managedObjectContext] undoManager]; 
[undoManager setActionName:[NSString stringWithFormat:@"%@", editedFieldName]]; 

if (editingName){ 
    [editedObject setValue:textField.text forKey:editedFieldKey]; 
}else{ 
    [self toggleButtonPressed]; 
} 

[self.navigationController popViewControllerAnimated:YES]; 
} 

我无法让UISwitch在核心数据和详细视图控制器的上下文中工作。当你在核心数据中创建一个BOOL,然后在xcode中创建相应的类时,它会生成一个NSNumber。这很好,但是当数据被保存和调用时,它不会产生“0”和“1”,而会产生非常大的整数(7-8位)。我上面做的是将信息存储为二进制字符串,使用“a”或“b”作为字符串存储。这个效果不好,主要是因为我无法使用UISwitch加载之前存储的值(打开或关闭)。我确信之前已经处理过这个问题,但我在网上找不到很多文档。如果有任何想法或建议,相对于上面的代码,请告诉我。谢谢。UISwitch核心数据

2011-12-06 15:49:41.042 sampNav[820:207] 101783056 
2011-12-06 15:49:41.043 sampNav[820:207] 80887600 

- (IBAction)save { 

NSUndoManager * undoManager = [[editedObject managedObjectContext] undoManager]; 
[undoManager setActionName:[NSString stringWithFormat:@"%@", editedFieldName]]; 

if (editingName){ 
    [editedObject setValue:textField.text forKey:editedFieldKey]; 
}else{ 

    [self toggleButtonPressed]; 

} 

[self.navigationController popViewControllerAnimated:YES]; 

}

-(IBAction) toggleButtonPressed{ 
if (someSwitch.on==YES) 
{ 
    [editedObject setValue:[NSNumber numberWithInt:1] forKey:editedFieldKey]; 
    NSLog(@"%d",[editedObject valueForKey:editedFieldKey]); 

} 
else [editedObject setValue:[NSNumber numberWithInt:0] forKey:editedFieldKey]; 
NSLog(@"%d",[editedObject valueForKey:editedFieldKey]); 

}

问题是,当这些值被存储为对象的NSNumber的值是大的整数。 NSLog被列在最顶端。任何人都可以解释吗?

回答

0

你的代码,因为它代表:

if(z==y){ 

是比较指针不是字符串,您需要:

if([z isEqualToString:y]){ 

为了让字符串比较工作,从而开关具有正确的初始状态...

但是你真的想要使用核心数据BOOL版本并获取存储在NSManagedObject中的NSNumber的值。我怀疑你没有将NSNumber指针转换为对象到boolValue中。

if([[editedObject valueForKey:editedFieldKey] boolValue]) {