Multithreading 核心数据和分布式对象
亲爱的社区。 我尝试使用核心数据发布多用户。我使用的是一个客户机-服务器的bonjour连接。它现在是如何工作的: 服务器部件:Multithreading 核心数据和分布式对象,multithreading,cocoa,core-data,Multithreading,Cocoa,Core Data,亲爱的社区。 我尝试使用核心数据发布多用户。我使用的是一个客户机-服务器的bonjour连接。它现在是如何工作的: 服务器部件: - (void)startBroadcasting; { receiveSocket = [[NSSocketPort alloc] init]; int receivePort = [self portFromSocket:receiveSocket]; NSLog(@"NETWORK: port is %d",receivePort); myConnection
- (void)startBroadcasting;
{
receiveSocket = [[NSSocketPort alloc] init];
int receivePort = [self portFromSocket:receiveSocket];
NSLog(@"NETWORK: port is %d",receivePort);
myConnection = [[NSConnection alloc] initWithReceivePort:receiveSocket
sendPort:nil];
[myConnection setRootObject:self];
myService = [[NSNetService alloc] initWithDomain:kDomainName
type:kServiceName
name:kServerName
port:receivePort];
[myService setDelegate:self];
[myService publish];
}
- (byref NSArray*)allObjects
{
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Carrier"
inManagedObjectContext:context];
[request setEntity:entity];
[request setIncludesSubentities:YES];
NSError *error = nil;
NSArray *objects = [context executeFetchRequest:request error:&error];
[request release], request = nil;
if (error) {
NSLog(@"%@:%@ error: %@", [self class], NSStringFromSelector(_cmd), error);
return nil;
}
return objects;
}
客户部分:
- (void)netServiceDidResolveAddress:(NSNetService*)service
{
NSLog(@"%@:%@ netServiceDidResolveAddress find something\n", [self class], NSStringFromSelector(_cmd));
NSConnection *clientConnection = nil;
NSSocketPort *socket = nil;
//NSData *address = [[service addresses] lastObject];
//u_char family = ((struct sockaddr*)[address bytes])->sa_family;
//socket = [[NSSocketPort alloc] initRemoteWithProtocolFamily:family
// socketType:SOCK_STREAM
// protocol:IPPROTO_TCP
// address:address];
socket = [[NSSocketPort alloc] initRemoteWithTCPPort:[service port]
host:[service hostName]];
clientConnection = [NSConnection connectionWithReceivePort:nil
sendPort:socket];
[clientConnection enableMultipleThreads];
[self setServer:[clientConnection rootProxy]];
[socket release], socket = nil;
[service stop];
[service release];
// testing connection:
[server ping];
NSArray *allObjects = [server allObjects];
[carriersArrayVisible setContent:allObjects];
}
实体载体是我的树对象的头部。
数据库大小为220M。
一切正常,但我不能用那种方式,因为:
1.当我在服务器上进行更新时,我会删除一些“Carrier”对象,以及这个案例产品
CoreData无法实现的故障
尝试在客户端按列对数组排序时出错
也许有人可以分享经验或推荐一个好的例子?我只是第一次尝试了解核心数据。我不确定这与我刚才读到的有关。数据存储的数据文件通常存储在xml类型的文件中,核心数据必须加载整个文件。但您可以将其更改为SQLite类型的数据库,该数据库只加载当时需要的内容。因此速度更快。在使用SQLite时有一些大的注意事项,特别是当您已经设置好东西时。(在本初学者示例的第22页)我有sql类型的XML,当然,XML在大型数据库中不能很好地工作。我的解决方案是——更改应用程序的设计并避免删除。托管对象上下文中的所有新对象都包含所有数据,这是我最初创建设计应用程序时不理解的。