57 iphone cocoa-touch core-data
我在弄清楚这个核心数据的东西时遇到了一些麻烦.如何创建具有唯一ID的新条目?在SQL中,我只将一个字段声明为自动增量字段.我在这里没有看到类似的东西,但我可能会遗漏一些东西.我只想要一个自动递增的NSInteger字段,所以当我手动将项添加到数据库时,我会有一些形式的引用.
use*_*764 148
虽然我同意你所说的,核心数据背后有一个ID机制.ID确实由Core-Data管理,但您可以使用以下命令检索它们:
NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅: 核心数据编程指南
bbu*_*bum 28
这不是CoreData的工作方式.
在CoreData中,您可以创建实体实例.每个实例都是唯一的.然后根据需要检索和操作实例.CoreData负责处理您的持久性,包括唯一标识实例.
远离传统关系数据库的所有知识.
CoreData是一项非常强大的技术,它提供的功能远远超出了持久性等数据库.如果你接受它,它将为你节省很多代码并且表现得非常好.
Luk*_*asz 10
此类函数将返回id属性的下一个可用编号(它必须是整数属性).
我称之为自动增量值发生器.我仍然同意其他人认为有针对性的ID,但有时你只需要数字.
您可以将此函数放在实体的NSManagedObject子类中:
+(NSNumber *)nextAvailble:(NSString *)idKey forEntityName:(NSString *)entityName inContext:(NSManagedObjectContext *)context{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSManagedObjectContext *moc = context;
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc];
[request setEntity:entity];
// [request setFetchLimit:1];
NSArray *propertiesArray = [[NSArray alloc] initWithObjects:idKey, nil];
[request setPropertiesToFetch:propertiesArray];
[propertiesArray release], propertiesArray = nil;
NSSortDescriptor *indexSort = [[NSSortDescriptor alloc] initWithKey:idKey ascending:YES];
NSArray *array = [[NSArray alloc] initWithObjects:indexSort, nil];
[request setSortDescriptors:array];
[array release], array = nil;
[indexSort release], indexSort = nil;
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// NSSLog(@"Autoincrement fetch results: %@", results);
NSManagedObject *maxIndexedObject = [results lastObject];
[request release], request = nil;
if (error) {
NSLog(@"Error fetching index: %@\n%@", [error localizedDescription], [error userInfo]);
}
//NSAssert3(error == nil, @"Error fetching index: %@\n%@", [error localizedDescription], [error userInfo]);
NSInteger myIndex = 1;
if (maxIndexedObject) {
myIndex = [[maxIndexedObject valueForKey:idKey] integerValue] + 1;
}
return [NSNumber numberWithInteger:myIndex];
}
Run Code Online (Sandbox Code Playgroud)
小智 6
看看:[[NSProcessInfo processInfo] globallyUniqueString].
Apple文档:流程的全局ID.该ID包括主机名,进程ID和时间戳,以确保该ID对于网络是唯一的,如果您不希望人们猜测该ID,这将非常方便.
以下是CoreData对象的三种唯一ID表示形式:
NSManagedObjectID *taskID = [task objectID];
NSURL *taskUniqueURLKey = task.objectID.URIRepresentation;
NSString *taskUniqueStringKey = task.objectID.URIRepresentation.absoluteString;
Run Code Online (Sandbox Code Playgroud)
!!!!注意:如果你想使用上面的唯一键作为索引,请确保在使用之前将对象保存到上下文,或者objectID将是临时Id,稍后将替换它(例如在保存之后).查看NSManagedObjectID类的apple文档:
- (BOOL)isTemporaryID; // indicates whether or not this ID will be replaced later,
such as after a save operation (temporary IDs are assigned to newly inserted objects
and replaced with permanent IDs when an object is written to a persistent store); most
IDs return NO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47183 次 |
| 最近记录: |