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在Core Data和详细视图控制器的上下文中工作。当您在核心数据中创建BOOL,然后在xcode中创建相应的类时,它会生成一个NSNumber。这很好,但是当保存和调用数据时,它不会产生“0”和“1”,而是产生非常大的整数(7-8位)。我上面做的是将信息存储为二进制字符串,使用“a”或“b”作为存储字符串。这样做效果不佳,主要是因为我不能让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 :(得分:0)
您的代码:
if(z==y){
比较指针而不是字符串,你需要:
if([z isEqualToString:y]){
要使字符串比较起作用,以便交换机具有正确的初始状态...
但是你真的想要使用核心数据BOOL版本并获得存储在NSManagedObject中的NSNumber的值。我怀疑你没有将对象的NSNumber指针转换为boolValue。
if([[editedObject valueForKey:editedFieldKey] boolValue]) {