cocoa - 自动创建冲突的 NSFileVersions

标签 cocoa conflict icloud foundation nsfileversion

我编写了一个自定义冲突处理例程,它会自动解决 NSFileVersion 版本的冲突。现在我想编写单元测试以确保它有效。问题如下:

How do I cause/create conflicting versions within a unit test?

这本质上可以归结为:如何在不通过 iCloud 手动执行的情况下引发冲突?由于这仅用于测试目的,因此我不在乎使用私有(private) API 进行滥用或直接侵入系统 - 只要结果是从 NSFileVersion 的 +unresolvedConflictVersionsOfItemAtURL 报告的冲突即可。任何建议将不胜感激!

最大

最佳答案

您可以使用您自己的版本修补+unresolvedConflictVersionsOfItemAtURL,该版本会返回冲突版本数组:

#import <objc/runtime.h>

static IMP __originalUnresolvedConflictVersionIMP = NULL ;
static NSArray * MyNSFileVersionUnresolvedConflictVersions( id self, SEL _cmd, NSURL * url )
{
    // this code just calls the original implementation... 
    // You can return an array of conflicting NSFileVersion objects instead...

    NSLog(@"%s called\n", __PRETTY_FUNCTION__ ) ;
    return (*__originalUnresolvedConflictVersionIMP)( self, _cmd, url ) ;
}


@implementation NSFileVersion (Test)

+(void)load
{
    __originalUnresolvedConflictVersionIMP = class_replaceMethod( objc_getMetaClass( "NSFileVersion") , @selector( unresolvedConflictVersionsOfItemAtURL: ), (IMP)MyNSFileVersionUnresolvedConflictVersions, "@@:@" ) ;
}

@end

这足以继续吗?我可能首先在我的替代“方法”中尝试这个:

return [ [ self otherVersionsOfItemAtURL:url ] lastObject ] ;

关于cocoa - 自动创建冲突的 NSFileVersions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133242/

相关文章:

git - git 的 -X "theirs"不处理新的/删除的文件冲突吗?

iphone - 如何检测用户是否为我的应用启用了 iCloud?

xcode - 列出 iCloud 中可用的文件

cocoa - 在 Cocoa(不是 Cocoa Touch)中的 View 之间切换

objective-c - 列出项目的所有UIViewController

macos - NSButton attributeTitle 在按钮按下时改变颜色

javascript - jQuery 以 noConflict 模式加载,即使作为函数参数传递也无法访问 $

git - 冲突(内容): Merge conflict in

ios - 使用 iCloud 进行应用程序数据库备份,但不同步

Objective-C – ABMultiValueRef 获取类型 (ABAddressBook)