我有一个测试WatchKit扩展项目,它调用WKInterfaceController OpenParentApplication:为了获得显示主ios应用程序的信息,然后查询数据库以获取要发送回watch的数据,如下所示。
if ([userInfo objectForKey:@"categoryRequest"])
{
BFLiteDatabase * db = [BFDatabase getDatabase];
NSMutableArray * categories = [NSMutableArray new];
BFLiteCommand * cmd = [db commandFromString:[BFCategory selectStatement]];
while([cmd readNext])
{
[categories addObject: [[BFShoppingCategory alloc] initFromCommand:cmd]];
}
NSDictionary * result = [[NSDictionary alloc] initWithDictionary:[NSDictionary dictionaryWithObject:[NSArray arrayWithArray:categories] forKey:@"categoryResult"]];
reply(result);
}
但是我一回复就会得到一个sigbat,并且我已经将它缩小到一个事实,即我将nsarray赋给一个字典值的值。
我不明白为什么这是违法的,什么是最好的解决办法?
敬克里斯蒂安·安徒生
除了为了创建最终的nsdictionary
而投入了太多的工作之外,我找不出任何明显的错误。
这将是一种更干净的处理方法:
nsdictionary*result=@{@“categoryresult”:[NSArray ArrayWithArray:categories]};
从文档中
字典的内容必须可以序列化到属性列表文件
这意味着nscoding
将不起作用。您可以使用rawrepresentable
协议并从原始值重新创建对象。
好吧,我发现了一个问题,我认为问题是categories数组包含BFShoppingCategory对象,我认为这些对象不是serilizeble的,所以我将不使用对象,而是传递基本数组,这应该可以工作