Tag: 同步

iOS – 核心数据和服务器数据库同步最佳实践

我开始为大规模应用程序设置核心数据模型,并希望在涉及到服务器数据库和脱机function方面对正确的同步方法/技术有所反馈。 我使用PHP和MySQL作为我的Web服务器/数据库。 我已经知道如何连接,接收数据,存储到核心数据等。我正在寻找更多的方法和跟踪数据变化的具体情况的帮助: A)确保应用程序和服务器在线和离线使用期间保持同步(即,离线活动一旦恢复在线状态将被推高)。 B)优化保存数据到应用程序的速度。 我的主要问题是: 什么是最好的方法来检查应用程序中的新的/更新的数据仍然需要同步(离线使用后)? (即在我的所有核心数据实体中,我放置了一个“isSynchronized”属性BOOLtypes,然后更新到“YES”,一旦成功提交,响应从服务器发回)。 这是最好的方法吗? 优化将数据从服务器保存到核心数据的速度的最佳方法是什么? (即如何更新数据的核心数据比在服务器数据库上的东西没有迭代通过每个实体,只更新每一次)? 是否可以不添加服务器数据库列来跟踪每个表的更新时间戳? 再次,我已经知道如何下载数据并将其存储到Core Data中,我只是寻求一些帮助确保跨应用程序和服务器数据库同步的最佳实践,同时确保优化的处理时间。

核心数据云同步 – 需要逻辑帮助

我正在为我正在开发的核心数据应用程序集思广益的云同步解决scheme。 我打算一旦完成这个工作,就开放源代码,任何人都可以使用他们的核心数据应用程序,所以从社区input这个系统应该如何工作,非常感谢:-)这是我在想什么: 服务器端 存储提供商 与所有的云同步系统一样,存储是一个难题。 有很多方法来处理这个问题。 我可以build立自己的服务器用于存储,或者使用像Amazon S3这样的服务,但是因为我是以$ 0的资本开始的,所以在这个时候,付费存储解决scheme不是一个可行的select。 经过一番思考,我决定与Dropbox (一个已经很好build立的云同步应用程序和存储提供商)解决。 使用Dropbox的优点是: 它是免费的(对于有限的空间) 除了作为存储服务之外,它还处理云同步 他们最近发布了一个Objective-C SDK,这使得在Mac和iPhone应用程序中使用它更容易 如果我决定在将来转换到不同的存储提供商,我打算在这个云同步框架中添加“服务”,基本上允许任何人创build一个服务类来与他们select的存储提供者连接,这可以简单地插入框架。 存储结构 这是一个非常困难的部分,所以我需要尽可能多的input,我可以在这里。 我一直在想这样的结构: CloudSyncFramework ======> [app name] ==========> devices =============> (device id) ================> deviceinfo ================> changeset ==========> entities =============> (entity name) ================> (object id) 这个结构的快速解释: 主“CloudSyncFramework”(名称未定)文件夹将为每个使用该框架的应用程序包含单独的文件夹 每个应用程序文件夹都包含设备文件夹和实体文件夹 设备文件夹将包含为该帐户注册的每个设备的文件夹。 设备文件夹将根据设备ID进行命名,使用[[UIDevice currentDevice] uniqueIdentifier] (在iOS上)或序列号(在Mac OS上)等获得。 每个设备文件夹包含两个文件: deviceinfo和changeset 。 deviceinfo包含有关设备的信息(例如操作系统版本,上次同步date,型号等),并且更改集文件包含有关自设备上次同步后发生更改的对象的信息。 这两个文件将只是简单的NSDictionaries使用NSKeyedArchiver归档到文件。 […]

AudioQueue时间和AudioQueue设备时间之间的差异

我试图将从主机iPhone发送的音乐同步到客户端iPhone ..使用AVAssetReader读取audio并通过数据包发送到客户端,客户端依次将其馈送到环形缓冲区,环形缓冲区依次填充audio缓冲区和开始玩。 我正在查看AudioQueue文档,似乎有两个与audioQueue相关的时间戳的不同概念: audio队列时间和audio队列设备时间 。 我不确定这两者是如何相关的,以及什么时候应该相互(或相互)使用。

使用RestKit进行同步调用

我有一个objectMapping为我的实体用户 RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class]]; [userMapping mapKeyPath:@"first_name" toAttribute:@"firstName"]; [userMapping mapKeyPath:@"last_name" toAttribute:@"lastName"]; [manager.mappingProvider setMapping:userMapping forKeyPath:@"users"]; [manager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]]; 而我想保存他的个人资料,当应用程序进入后台: – (void)applicationDidEnterBackground:(UIApplication *)application { [[RKObjectManager sharedManager] putObject:currentUser delegate:self]; } 但它不会让我在closures应用程序时运行请求(我猜测没有新的线程是允许的)。 所以我想同步做到这一点。 但是,我没有设法与RestKit做到这一点。 我身边有一些误解吗? 我想拥有: [[RKObjectManager sharedManager] putObjectSynchronously:currentUser];

跨线程事件信号(Obj-C)的同步/等待devise?

在Cocoa应用程序中,我有这样的设置: 主线程(M)可以向某个后台“生产者”线程(B)提交请求,以完成一些工作,比如计算X项目的结果。 此后不久,不同的后台线程(C)可能需要计算项目X的结果,并且同时要求这些结果。 线程C可以自己重新同步工作,但是如果线程B恰好在计算项X的中间,我想要线程C阻塞并从B得到结果。计算的结果是可以find的磁盘,所以数据传递不是问题。 在线程B完成项目X之前,阻塞线程C的最好方法是什么? 注意那里的B进程是任意的–X只是这个例子中很多项目中的一个。 我想要阻止,直到具体项目X完成。 所以从概念上讲,我想要的是当线程B开始说“我在X上工作”时,设置某种标志的方法,如果C进来看到那个标志,就等待标志清除,然后得到结果。 不知道我是否可以将NSLockslocking在这个angular色中,或者如果操作系统中有一个更好的基元。 任何想法(或潜在的重构问题)欢迎! 谢谢。

同步读写访问实例variables在iOS中的高性能?

什么是最好的方式/最less等待的方式来同步读取/写入访问的Objective-C中的实例variables为iOS? variables读取和写入的频率很高(假设每秒读写1000次)。 更改立即生效并不重要。 读取获得一致的数据并不重要,但写入迟早会反映在读取数据中。 有一些数据结构允许这个吗? 我想到了这个: 创build两个variables而不是一个variables; 我们称它们为v[0]和v[1] 。 对于每个v[i] ,创build一个并发调度队列来构build一个读写器locking机制。 我们称他们为q[i] 。 现在对于写操作,只有v[0]被写入,遵循q[0]的locking机制。 在读取操作中,首先读取v[1] ,并且仅在某个机会(例如1%)下读取操作查看v[0]并在必要时更新v[1] 。 下面的伪代码说明了这一点: typedef int VType; // the type of the variable VType* v; // array of first and second variable dispatch_queue_t* q; // queues for synchronizing access to v[i] – (void) setV:(VType)newV { [self setV:newV at:0]; } – (void) […]

定期的背景同步

我相当新的iOS编程,现在想要实现定期的后台同步来同步我的服务器数据与客户端数据。 我想要实现的是与Android SyncAdapter相媲美,您可以在其中定义一个时间间隔(例如每30分钟),系统将在后台自动触发定义的任务。 到目前为止,我无法findSwift 3.0的这种机制,所以我需要问问somone对我有没有经验或者一些提示。 我想要做的事听起来很简单: 当应用程序第一次启动时,应用程序应该设置一个同步pipe理器,每30分钟自动触发一个后台任务。 后台任务负责同步服务器和客户端数据(使用Alamofire)。 我怎样才能做到这一点?

核心数据模型文件多核到一个xcode项目是否可行?

我正在研究一个我正在处理核心数据的ipad应用程序。 应用程序pipe理的数据可以分为两类。 第一种数据仅适用于该设备或应用程序。 而另一类数据需要在具有相同应用的各种设备之间同步。 所以在scnerio中,我想到了在我的项目中有两个模型文件和两个corressponding的sqlite文件。 并同步一个sqlite文件,以实现syching。 请build议,如果我的方法是正确和可行的。 如果没有,那么请build议其他解决scheme。 嘿家伙请尝试理解这个问题。 在这里我正在谈论两个不同结构的sqlite文件。 意思是“.xcdatamodel”模型文件 谢谢。

performBlock:和performBlockAndWait之间的行为差​​异:?

我在私人队列中创buildNSManagedObjectContext来处理从文件和/或服务中获取的数据更新: NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; privateContext.persistentStoreCoordinator = appDelegate.persistentStoreCoordinator; 由于我使用的是私有队列,我并不完全理解performBlock:和performBlockAndWait: methods之间的区别…为了执行我的数据更新,我正在执行此操作: [privateContext performBlock: ^{ // Parse files and/or call services and parse // their responses // Save context [privateContext save:nil]; dispatch_async(dispatch_get_main_queue(), ^{ // Notify update to user }); }]; 在这种情况下,我的数据更新是同步的和顺序的,所以我想这是保存上下文的正确位置,对吧? 如果我做错了,我会很感激,如果你让我知道。 另一方面,这个代码是否等同? [privateContext performBlockAndWait: ^{ // Parse files […]

在同步完成之前iOS NSUserDefaults访问

如果我设置了一个NSUserDefault对象,并在它被同步之前尝试访问它,我将能够访问我刚刚添加的对象吗? 我已经尝试编写代码来testing它,但是我不确定是否在没有我知道的情况下发生了同步 。