rat*_*p99 0 singleton core-data objective-c ios
我需要一个标准列表,从中创建谓词以返回根据用户输入进行各种排序的数据.因此,创建一个名为"SearchSpecs"的实体及其相关的子类文件SearchSpecs.h和似乎是合理的SearchSpecs.m.通过这种方式,我的其他类可以使用此类中的方法和属性来创建一个"规范表",从中启动Core Data fetch.
但是,我注意到"单身人士"似乎存在很多争议.我很新,据我所知,从来没有创造过一个单身人士,想知道我现在是不是这样做了?
明白我不想重新开放或煽动单身辩论的火焰,因为我真的不知道它是什么.但我也不想在我的应用程序中创建一些怪物.
有人可以向我保证我的方法安全合理吗?
这是我SearchSpecs.h和SearchSpecs.m文件中的相关代码:
//
// SearchSpecs.h
// WMDGx
//
// Created by Tim Jones on 2/7/14.
// Copyright (c) 2014 TDJ. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface SearchSpecs : NSManagedObject
// Properties
@property (nonatomic, retain) NSDate * fromDate;
@property (nonatomic, retain) NSDate * toDate;
@property (nonatomic, retain) NSString * categoryOfInterest;
@property (nonatomic, retain) NSString * activityOfInterest;
@property (nonatomic, retain) NSString * benchmarkCategory;
@property (nonatomic, retain) NSString * benchmarkActivity;
// Set Methods
- (void) setActivityOfInterest:(NSString *)activityOfInterest;
- (void) setCategoryOfInterest:(NSString *)categoryOfInterest;
- (void) setBenchmarkActivity:(NSString *)benchmarkActivity;
- (void) setBenchmarkCategory:(NSString *)benchmarkCategory;
- (void) setFromDate:(NSDate *)fromDate;
- (void) setToDate:(NSDate *)toDate;
// Create and delete
- (void) createFreshSpecSheet;
- (void) saveSpecSheet;
- (void) deleteSpecSheet;
@end
Run Code Online (Sandbox Code Playgroud)
//
// SearchSpecs.m
// WMDGx
//
// Created by Tim Jones on 2/7/14.
// Copyright (c) 2014 TDJ. All rights reserved.
//
#import "SearchSpecs.h"
@implementation SearchSpecs
@dynamic toDate;
@dynamic fromDate;
@dynamic benchmarkCategory;
@dynamic benchmarkActivity;
@dynamic categoryOfInterest;
@dynamic activityOfInterest;
- (void) setActivityOfInterest:(NSString *)activityOfInterest
{
}
- (void) setCategoryOfInterest:(NSString *)categoryOfInterest
{
}
- (void) setBenchmarkActivity:(NSString *)benchmarkActivity
{
}
- (void) setBenchmarkCategory:(NSString *)benchmarkCategory
{
}
- (void) setFromDate:(NSDate *)fromDate
{
}
- (void) setToDate:(NSDate *)toDate
{
}
- (void) createFreshSpecSheet
{
}
- (void) saveSpecSheet
{
}
- (void) deleteSpecSheet
{
}
@end
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
到现在为止,你知道这不是一个单身人士.它也不是一个正确形成的子类NSManagedObject.为什么?您正在定义属性和访问者.这会让你有些困惑.您的标题应为:
@interface SearchSpec : NSManagedObject
// Properties
@property (nonatomic, retain) NSDate *fromDate;
@property (nonatomic, retain) NSDate *toDate;
@property (nonatomic, retain) NSString *categoryOfInterest;
@property (nonatomic, retain) NSString *activityOfInterest;
@property (nonatomic, retain) NSString *benchmarkCategory;
@property (nonatomic, retain) NSString *benchmarkActivity;
@end
Run Code Online (Sandbox Code Playgroud)
设置的访问器是多余的,因为属性将为您执行此操作.您的创建,添加等也是多余的,因为这是Core Data将为您处理的内容.所以你的实现现在看起来像这样:
@implementation SearchSpec
@dynamic fromDate;
@dynamic toDate;
@dynamic categoryOfInterest;
@dynamic activityOfInterest;
@dynamic benchmarkCategory;
@dynamic benchmarkActivity;
@end
Run Code Online (Sandbox Code Playgroud)
很清洁.那你怎么创建一个实例呢?不是[[SearchSpec alloc] init]!您需要让Core Data为您创建它:
NSManagedObjectContext *moc = ...; //Use your existing MOC
SearchSpec *spec = [NSEntityDescription insertNewObjectForEntityForName:@"SearchSpec" inManagedObjectContext:moc];
Run Code Online (Sandbox Code Playgroud)
要删除现有规范:
NSManagedObjectContext *moc = ...; //Use your existing MOC
SearchSpec *spec = ...; //Your existing spec object
[moc deleteObject:spec];
Run Code Online (Sandbox Code Playgroud)
最后,保存您对规范所做的任何更改:
NSManagedObjectContext *moc = ...; //Use your existing MOC
SearchSpec *spec = ...; //Your existing spec object
NSError *error = nil;
if ([moc save:&error] == NO) {
NSLog(@"Error saving spec: %@\n%@", [error localizedDescription], [error userInfo]);
}
Run Code Online (Sandbox Code Playgroud)
核心数据为您管理数据的生命周期.因此,您可以使用上下文来添加/删除/更新数据对象.
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |