Cocoa NSDistantObject枚举
我正在为客户机-服务器应用程序进行通信,遇到了奇怪的问题。 下面是我拾取对象的代码Cocoa NSDistantObject枚举,cocoa,core-data,Cocoa,Core Data,我正在为客户机-服务器应用程序进行通信,遇到了奇怪的问题。 下面是我拾取对象的代码 - (byref NSArray*)objectsOfName:(bycopy NSString*)name withPredicate:(bycopy NSPredicate*)predicate; { NSManagedObjectContext *context = [self managedObjectContext]; NSError *error
- (byref NSArray*)objectsOfName:(bycopy NSString*)name
withPredicate:(bycopy NSPredicate*)predicate;
{
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:name
inManagedObjectContext:context]];
[request setPredicate:predicate];
NSArray *results = [context executeFetchRequest:request error:&error];
[request release], request = nil;
if (error) {
NSLog(@"%@:%@ Error on fetch %@", [self class], NSStringFromSelector(_cmd), error);
return nil;
}
//NSLog(@"%@:%@ Result of fetch is %@", [self class], NSStringFromSelector(_cmd), results);
return results;
}
这里是皮卡:
NSArray *destinations;
#ifdef SNOW_CLIENT
destinations = [server objectsOfName:@"DestinationsListWeBuy" withPredicate:predicate];
如果我这样做
NSLog(@“目的地:%@\n”,目的地);
我在日志中看到了所有对象。
如果我试着去做
NSLog(@"all:%@\n%@\n%@\n",[[destinations objectAtIndex:0] valueForKey:@"rate"],[[destinations objectAtIndex:0] valueForKey:@"lastUsedACD"],[[destinations objectAtIndex:0] valueForKey:@"lastUsedCallAttempts"]);
我也看到了属性。
但是,如果我尝试围绕对象进行循环:
for (NSManagedObject *dest in destinations)
{
NSLog(@"all:%@\n%@\n%@\n",[dest valueForKey:@"rate"],[dest valueForKey:@"lastUsedACD"],[dest valueForKey:@"lastUsedCallAttempts"]);
我在这部分代码中有EXC_BAD_访问权限:
for (NSManagedObject *dest in destinations)
我所知道的所有调试技术都不能让我理解发生了什么。(NSZombieEnabled=YES)
如果我以另一种方式循环:
for (NSUInteger count = 0;count < [destinations count]; count++)
NSLog(@"all:%@\n%@\n%@\n",[[destinations objectAtIndex:count] valueForKey:@"rate"],[[destinations objectAtIndex:count] valueForKey:@"lastUsedACD"],[[destinations objectAtIndex:count] valueForKey:@"lastUsedCallAttempts"]);
这是我在客户端对它们所做的:
NSArray *allObjects = [server allObjects];
[carrierArrayController setContent:allObjects];
在这种情况下没有序列化。任何其他方法(比如将服务器moc的副本发送到客户端都不起作用,它只会在main.c上生成异常)
p、 非常感谢马库斯的核心数据书
发送到类0x1000a2ed8的无法识别的选择器2011-03-17 02:15:18.566 snowClient[19380:903]+[AppDelegate encodeWithCoder:]:发送到类0x1000a2ed8的无法识别的选择器
这不是一个核心数据问题。这是代码中的一个错误,您试图对一个不响应该方法的对象调用一个方法。您需要跟踪它,因为您似乎正在尝试序列化AppDelegate
更新
0x1000a2ed8是什么类型的类?中断异常并打印出对象以查看它是什么。同样,这不是一个直接的核心数据错误,而是向一个不响应该消息的对象发送消息。核心数据可能不再允许您将托管对象作为分布式对象跨多个服务器发送。这可能只是过度释放对象的问题。没有进一步的调查就无法知道
第一步:找出对象0x1000a2ed8是什么,并查看对象是否在一次运行到下一次运行时发生变化。亲爱的Markus,感谢您抽出时间,我根据您的评论更新了我的问题我很抱歉信息不正确,但它在像魔术一样发展的过程中发生了变化:)
NSArray *allObjects = [server allObjects];
[carrierArrayController setContent:allObjects];