将数组从ios主应用程序传递到WatchKit扩展

时间:2015-02-26 00:03:52

标签: ios watchkit

我有这个测试WatchKit扩展项目,调用WKInterfaceController openParentApplication:以获取要显示的信息 主ios App然后查询数据库,以便将数据发送回手表。

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分配给字典值的值这一事实。

我无法理解为什么这是非法的,什么是最好的解决方法?

关心Christian Andersen

3 个答案:

答案 0 :(得分:1)

除了你为了创造最后的NSDictionary所做的太多工作之外,我无法发现任何明显的错误。

这将是一种更清洁的方式来接近它:

NSDictionary *result = @{@"categoryResult":[NSArray arrayWithArray:categories]};

答案 1 :(得分:1)

来自documentation

  

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

这意味着NSCoding无效。您可以使用RawRepresentable协议并从原始值重新创建对象。

答案 2 :(得分:0)

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