Основные данные UIswitch

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 и Detail View. Когда вы создаете 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 приведен в самом верху. Кто-нибудь может это объяснить?


person user1083689    schedule 06.12.2011    source источник


Ответы (1)


ваш код в его нынешнем виде:

if(z==y){

Сравнивает указатели, а не строки, вам нужно:

if([z isEqualToString:y]){

Чтобы сравнение строк работало так, чтобы переключатель имел правильное начальное состояние...

Но вы действительно хотите использовать версию BOOL основных данных и получить значение NSNumber, которое хранится в NSManagedObject. Я подозреваю, что вы не конвертируете указатель NSNumber на объект в boolValue.

if([[editedObject valueForKey:editedFieldKey] boolValue]) {
person Brent Priddy    schedule 06.12.2011