UISwitch основные данные - PullRequest
       14

UISwitch основные данные

0 голосов
/ 06 декабря 2011
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 дается на самом верху. Кто-нибудь может объяснить это?

1 Ответ

0 голосов
/ 06 декабря 2011

ваш код в таком виде:

if(z==y){

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

if([z isEqualToString:y]){

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

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

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