提问者:小点点

将阵列从ios主应用程序传递到WatchKit扩展


我有一个测试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赋给一个字典值的值。

我不明白为什么这是违法的,什么是最好的解决办法?

敬克里斯蒂安·安徒生


共3个答案

匿名用户

除了为了创建最终的nsdictionary而投入了太多的工作之外,我找不出任何明显的错误。

这将是一种更干净的处理方法:

nsdictionary*result=@{@“categoryresult”:[NSArray ArrayWithArray:categories]};

匿名用户

从文档中

字典的内容必须可以序列化到属性列表文件

这意味着nscoding将不起作用。您可以使用rawrepresentable协议并从原始值重新创建对象。

匿名用户

好吧,我发现了一个问题,我认为问题是categories数组包含BFShoppingCategory对象,我认为这些对象不是serilizeble的,所以我将不使用对象,而是传递基本数组,这应该可以工作