Core data UISwitch核心数据

Core data UISwitch核心数据,core-data,uiswitch,Core Data,Uiswitch,我无法让UISwitch在核心数据和详细视图控制器的上下文中工作。当您在核心数据中创建BOOL,然后在xcode中创建相应的类时,它会生成一个NSNumber。这很好,但是当数据被保存和调用时,它不是使用“0”和“1”,而是使用非常大的整数(7-8位)。我在上面所做的是将信息存储为二进制字符串,使用“a”或“b”作为存储字符串。这并没有很好地工作,主要是因为我无法让UISwitch加载以前存储的值(on或off)。我确信这已经被处理过了,但是我在网上找不到太多的文档。如果有任何想法或建议,有关上

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

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];
}
}

}


问题是,当这些值存储为NSNumber对象时,这些值是大整数。NSLog在顶部给出。有人能解释一下吗?

您的代码:

-(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]);
如果正在比较指针而不是字符串,则需要:

if(z==y){
要使字符串比较正常工作,以便开关具有正确的初始状态

但是您确实希望使用核心数据BOOL版本并获取存储在NSManagedObject中的NSNumber的值。我怀疑您没有将指向对象的NSNumber指针转换为布尔值

if([z isEqualToString:y]){
if([z isEqualToString:y]){
if([[editedObject valueForKey:editedFieldKey] boolValue]) {