小编Dre*_*ack的帖子

符合swift中多个协议的类型

我有一个符合多种协议的Objective-C变量.

id <NSObject, NSCopying, NSCoding> identityToken; 
Run Code Online (Sandbox Code Playgroud)

我如何在Swift中表示这种类型?

swift

73
推荐指数
3
解决办法
2万
查看次数

NSTabViewController忽略转换和标题传播设置

我正在尝试使用故事板和新的NSTabViewController类为我的应用程序创建一个首选项面板.

我可以让它工作,但故事板中的转换设置似乎被忽略了.它只是从一个标签跳到下一个标签,窗口的大小瞬间变化.

我认为这可能取决于我是否使用autolayout,但是当我切换它时它似乎没有改变过渡行为.

我还检查了"传播标题"设置.我原本以为它将采用标签项的标签或视图控制器的标题,并将其作为窗口标题传播,但似乎并没有这样做.

有人这个上班吗?

这是我正在测试的简单示例应用程序:https://www.dropbox.com/s/roxaplxy5gtlqns/Again.zip?dl = 0

更新:感谢Pierre的工作.通过继承NSTabViewController,结束了一个很好的转换首选项窗口,如下所示:

@implementation MCPreferencesTabViewController

-(void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem
{
    [super tabView:tabView willSelectTabViewItem:tabViewItem];

    NSTabViewItem *currentTabItem = tabView.selectedTabViewItem;
    currentTabItem.view.hidden = YES;
    tabViewItem.view.hidden = YES;

    NSWindow *window = self.view.window;
    NSSize contentSize = tabViewItem.view.fittingSize;
    NSSize newWindowSize = [window frameRectForContentRect:(CGRect){CGPointZero, contentSize}].size;

    NSRect frame = [window frame];
    frame.origin.y += frame.size.height;
    frame.origin.y -= newWindowSize.height;
    frame.size = newWindowSize;

    [self.view.window setFrame:frame display:NO animate:YES];
}

- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem
{
    [super tabView:tabView didSelectTabViewItem:tabViewItem];
    tabViewItem.view.hidden = NO;
}

@end
Run Code Online (Sandbox Code Playgroud)

cocoa nstabviewcontroller

16
推荐指数
2
解决办法
2605
查看次数

今日iCloud +核心数据(2015年7月10日)

几年前,Apple发布了Core Data应用程序的iCloud同步.然后我使用新的Apple机制发布了一个带有共享模型的iPad/iPhone/MAC应用程序.事情没有像预期的那样发生.同步机制有时不起作用.例如,在我的情况下,最近几个月很少通过我的3台设备完成同步.一般上传对象工作正常.但新的或删除的对象的下载过程正常崩溃.Apple前段时间发布了一种方法来强制设备重新下载模型的所有对象(NSPersistentStoreRebuildFromUbiquitousContentOption),这些对象正常工作,但这不是一个可接受的解决方案.

我的问题:是否有人完成了让iCloud + Core Data正常工作?如何在iOS 9 + El capitan下运行iCloud + CD,有什么经验吗?

我正在评估迁移到新的CloudKIT API,但我不喜欢在设备离线时自我管理对象上传的想法.指示模型更改的推送通知的新机制是否正常工作?

谢谢

synchronization core-data icloud cloudkit ensembles

8
推荐指数
1
解决办法
2675
查看次数

核心数据iCloud同步中的关系完整性和验证

考虑以下简单实体模型:实体A与实体B的一对一关系称为b.实体B具有称为a的反向关系.两种关系都不是可选的.

A            B
b  < ----- > a
Run Code Online (Sandbox Code Playgroud)

假设我们有两个设备(1)和(2)开始完全同步.每个都有一个A类对象和一个B类对象,它们彼此相关联.在设备1上,我们有对象A1和B1,在设备B上我们有相同的逻辑对象A1和B1.

现在假设在每个设备上进行了模拟更改:

在设备1上,我们删除B1,插入B2,并将A1与B2关联.然后保存更改.
在设备2上,我们删除B1,插入B3,并将A1与B3关联.然后保存更改.

设备1现在尝试从设备2导入事务日志.将插入B3,并且A1将与B3关联.到目前为止好,但B2,现在只剩下关系一个等于.的一个关系是非可选的,所以发生验证错误.

设备2上会出现类似的情况,因为有两个B对象,并且只有一个A对象要关联.因此必须始终存在验证错误,因为B对象中的一个必须具有设置为nil 关系.

更糟糕的是,任何未来的更改都会留下错误的B对象,因此验证失败.实际上,用户无法通过重置关系来自行解决问题.它永久地被打破了.

问题是,如何解决这样的验证错误?这一切都发生在NSPersistentStoreDidImportUbiquitousContentChangesNotification触发通知之前.它不是应用程序main NSManagedObjectContext中的验证错误,它是在将事务日志初始导入持久性存储期间发生的验证错误.

我能想到的唯一选择可能是尝试删除自定义setter(setA:)中的无效B对象,或者validateA:error:B类本身上的KVC验证方法(),因为这些似乎在事务日志导入期间被触发.但我不确定是否允许这样的副作用,当我尝试它时,它确实会导致令人讨厌的日志消息.

任何人都知道处理这个问题的正确方法是什么?

macos cocoa sync core-data icloud

6
推荐指数
1
解决办法
1356
查看次数