【发布时间】:2014-06-13 03:35:41
【问题描述】:
我试图在我的核心数据堆栈中简单地切换一个 BOOL 属性,并使用该 coredata bool 在我的 mainView 中的 viewDidLoad 中设置 UISwitch 的“状态”。
以下场景: 开关关闭,用户点击编辑(保存)UIButton,--> 将实体设置的 settingSysTimeOverride 属性从@NO 切换为@YES 下次应用程序启动时,在 viewDidLoad 中,我获取核心数据堆栈并查看 settingSysTimeOverride 的状态并使用它来 设置我的 UISwitch 的“状态”。
但由于某种原因,我的值没有存储到核心数据堆栈中。 附上整个项目,这里也是我的代码。
MainViewController.m
#import "MainViewController.h"
#import "AppDelegate.h"
@interface MainViewController ()
@property (nonatomic, strong)NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong)NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSMutableArray *settingsArray;
@end
@implementation MainViewController
@synthesize editSetting;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (NSManagedObjectContext *)managedObjectContext
{
return [(AppDelegate*)[[UIApplication sharedApplication]delegate]managedObjectContext];
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Setting" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"settingSysTimeOverride == %@", editSetting];
[fetchRequest setPredicate:predicate];
NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"ERROR! %@ - %@", [error localizedDescription], [error userInfo]);
} else {
NSLog(@"FETCH SUCCESSFUL");
}
if ((fetchedObjects.count) >0) {
// list array contents
for (int i=0; i < (fetchedObjects.count); i++) {
// output for debug purpose
NSLog(@"Array-index [%i]: %@", i, fetchedObjects[i]);
}
}
// check settingSysTimeOverride and set UISwitch-State
if (editSetting.settingSysTimeOverride.boolValue == 0) {
// turn switch to OFF - Position
_overrideSysTimeSwitch.on = NO;
} else {
// turn switch to ON - Position
_overrideSysTimeSwitch.on = YES;
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)editSave:(UIBarButtonItem *)sender
{
// toggle BOOL status of settingSysTimeOverride here
//
}
- (IBAction)overrideSysTime:(UISwitch *)sender
{
}
- (IBAction)timeFormat:(UISwitch *)sender {
}
@end
MainViewController.h
#import <UIKit/UIKit.h>
#import "Setting.h"
@interface MainViewController : UIViewController <NSFetchedResultsControllerDelegate>
@property (nonatomic, strong)Setting *editSetting;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *editSaveButton
@property (strong, nonatomic) IBOutlet UILabel *overrideSysTimeLabel;
@property (strong, nonatomic) IBOutlet UILabel *timeFormatLabel;
@property (strong, nonatomic) IBOutlet UISwitch *overrideSysTimeSwitch;
@property (strong, nonatomic) IBOutlet UISwitch *timeFormatSwitch;
- (IBAction)editSave:(UIBarButtonItem *)sender;
- (IBAction)overrideSysTime:(UISwitch *)sender;
- (IBAction)timeFormat:(UISwitch *)sender;
@end
AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end
设置.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Setting : NSManagedObject
@property (nonatomic, retain) NSString * settingName;
@property (nonatomic, retain) NSNumber * settingSysTimeOverride;
@property (nonatomic, retain) NSNumber * settingTimeFormat;
@end
Setting.m
#import "Setting.h"
@implementation Setting
@dynamic settingName;
@dynamic settingSysTimeOverride;
@dynamic settingTimeFormat;
@end
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: core-data