문제

I have been searching for the answer for a couple of weaks now but I just can't seem to find it. I have been trying to get a UISegmentedControl's data to save in the Core Data but I can't do it, it keeps showing me an errors and warnings, hope you can help me.

I have something like this:

#import "DetailScoutingViewController.h"

@interface DetailScoutingViewController ()

    @property (strong, nonatomic) IBOutlet UITextField *name;
    @property (strong, nonatomic) IBOutlet UITextField *number;
    @property (strong, nonatomic) IBOutlet UISegmentedControl *considered;

    - (IBAction)save:(id)sender;
    - (IBAction)cancel:(id)sender;

    @property (strong, nonatomic) NSManagedObject *teamData;

@end

@implementation DetailScoutingViewController
@synthesize teamData;

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (self.teamData) {

        [self.name setText:[self.teamData valueForKey:@"name"]];
        [self.number setText:[self.teamData valueForKey:@"number"]];
        [self.considered setSelectedSegmentIndex:[self.teamData valueForKey:@"considered"]];
    }
}

- (NSManagedObjectContext *)managedObjectContext {
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}

- (IBAction)save:(id)sender {

    NSManagedObjectContext *context = [self managedObjectContext];

    if (self.teamData) {
        // Update existing device
        [self.teamData setValue:self.name.text forKey:@"name"];
        [self.teamData setValue:self.number.text forKey:@"number"];
        [self.teamData setValue:self.considered.selectedSegmentIndex forKey:@"considered"];

    } else {
        // Create a new device
        NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Teams" inManagedObjectContext:context];
        [newDevice setValue:self.name.text forKey:@"name"];
        [newDevice setValue:self.number.text forKey:@"number"];
    }

    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self.navigationController popViewControllerAnimated:YES];
}

- (IBAction)cancel:(id)sender {

    [self.navigationController popViewControllerAnimated:YES];
}

The UITextField's data saves without a problem, the only problem I have is the UISegmentedControl. What should I do?

도움이 되었습니까?

해결책

[self.teamData valueForKey:@"considered"]

This returns what is likely to be an NSNumber instance, but setSelectedSegmentIndex: expects an NSInteger so you should be using:

[self.considered setSelectedSegmentIndex:[[self.teamData valueForKey:@"considered"] integerValue]];

You also need to change the corresponding save code to:

[self.teamData setValue:[NSNumber numberWithInteger:self.considered.selectedSegmentIndex] forKey:@"considered"];

This bit of code is not helping:

if ([delegate performSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
}

change to:

if ([delegate respondsToSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
}

At some point in some other controller you should be setting ...teamData = .... If you aren't, then your controller will always be creating a new Teams managed object and inserting it into the data store. In this case, you don't set the self.considered.selectedSegmentIndex so you will never store it. It's only ever stored when you already have a Teams object.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top