小编Jas*_*son的帖子

如何将iPhone核心数据与Web服务器同步,然后推送到其他设备?

我一直在研究一种方法,用于在多个设备(如iPad或Mac)之间同步存储在iPhone应用程序中的核心数据.在iOS上使用Core Data的同步框架并不多(如果有的话).但是,我一直在考虑以下概念:

  1. 对本地核心数据存储进行更改,并保存更改.(a)如果设备在线,它会尝试将变更集发送到服务器,包括发送变更集的设备的设备ID.(b)如果变更集未到达服务器,或者设备未联机,则应用程序会将更改集添加到队列中以在其联机时发送.
  2. 位于云中的服务器将其接收的特定更改集与其主数据库合并.
  3. 在云服务器上合并更改集(或更改集队列)后,服务器会使用某种轮询系统将所有这些更改集推送到向服务器注册的其他设备.(我想使用Apple的推送服务,但显然根据评论,这不是一个可行的系统.)

我需要考虑什么花哨的东西吗?我查看了REST框架,例如ObjectiveResource,Core ResourceRestfulCoreData.当然,这些都与Ruby on Rails一起使用,我并不依赖它,但它是一个开始的地方.我对我的解决方案的主要要求是:

  1. 任何更改都应该在后台发送而不会暂停主线程.
  2. 它应该使用尽可能少的带宽.

我考虑过一些挑战:

  1. 确保服务器上附加了不同设备上不同数据存储的对象ID.也就是说,我将有一个对象ID和设备ID表,它们通过对存储在数据库中的对象的引用来绑定.我将有一条记录(DatabaseId [此表是唯一的],ObjectId [整个数据库中的项目唯一],Datafield1,Datafield2),ObjectId字段将引用另一个表AllObjects:(ObjectId,DeviceId,DeviceObjectId).然后,当设备推送更改集时,它将从本地数据存储中的核心数据对象传递设备Id和objectId.然后我的云服务器将检查AllObjects表中的objectId和设备ID,并找到要在初始表中更改的记录.
  2. 所有更改都应加上时间戳,以便合并它们.
  3. 设备必须轮询服务器,而不会耗尽太多电池.
  4. 如果/当从服务器收到更改时,本地设备还需要更新内存中保存的任何内容.

还有什么我在这里失踪的吗?我应该考虑哪些框架才能实现这一目标?

iphone sync core-data ios data-synchronization

291
推荐指数
7
解决办法
9万
查看次数

如何从特定的对象ID获取Core Data对象?

我可以使用以下代码轻松地在Core Data中获取对象的ID:

NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)

但是,是否有办法通过为对象提供特定的对象ID来将对象从核心数据存储中取出?我知道我可以通过使用NSFetchRequest来实现这一点,如下所示:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

但是,我想以不启动自己的获取请求的方式执行此操作.有任何想法吗?

macos cocoa core-data nsfetchrequest ios

117
推荐指数
2
解决办法
7万
查看次数

多次通过核心数据迁移的示例或说明?

我的iPhone应用程序需要迁移其核心数据存储,而且一些数据库非常庞大.Apple的文档建议使用"多次传递"来迁移数据以减少内存使用.但是,文档非常有限,并没有很好地解释如何实际执行此操作.有人可以指出我一个好的例子,或者详细解释如何实际解决这个问题的过程吗?

iphone core-data objective-c core-data-migration ios

85
推荐指数
1
解决办法
3万
查看次数

Levenshtein距离算法优于O(n*m)?

我一直在寻找一种先进的levenshtein距离算法,到目前为止我发现的最好的是O(n*m),其中n和m是两个弦的长度.算法处于这种规模的原因是因为空间而不是时间,创建了两个字符串的矩阵,例如:

替代文字

是否有一个公开的levenshtein算法,它比O(n*m)更好?我并不反对看高级计算机科学论文和研究,但却找不到任何东西.我找到了一家名为Exorbyte的公司,该公司据称已经建立了超级先进且超快的Levenshtein算法,但当然这是商业秘密.我正在构建一个iPhone应用程序,我想使用Levenshtein距离计算.有一个Objective-c实现可用,但由于iPod和iPhone上的内存有限,我想找到一个更好的算法,如果可能的话.

algorithm big-o ios levenshtein-distance

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

核心数据,当NSFetchRequest返回NSDictionaryResultType时如何获取NSManagedObject的ObjectId?

我有一个NSFetchRequest返回对象的属性NSDictionaryResultType.是否有可能在这个字典中获取对象的ObjectId?否则,我将需要运行返回类型的查询,NSManagedObjectResultType对于大量返回的项目,返回类型要慢得多.

iphone core-data nsfetchrequest ios

34
推荐指数
2
解决办法
1万
查看次数

使用Objective-C在iPhone上本地化动态复数名词消息(例如"5个已处理项目")

在我当前的应用程序中,我有显示消息的代码,例如"5个已处理的项目".为了保持短语在语法上正确,即它是否应该是"5 Item"或"5 Items",我使用以下代码:

int numItems = 5;
NSString *myString = [[NSString alloc] initWithFormat:@"%d Item%@ Processed", numItems, (numItems == 1 ? @"" : @"s")];
Run Code Online (Sandbox Code Playgroud)

这个现在工作正常.但我正在本地化我的应用程序,并希望确保我正在翻译应用程序的所有语言中的文本语法正确.我可以这样做:

int numItems = 5;
NSString *myString = (numItems == 1 ? 
NSLocalizedStringWithTable(@"%d Item Processed", @"myApp", @"singular version") :
NSLocalizedStringWithTable(@"%d Items Processed", @"myApp", @"plural version"));
Run Code Online (Sandbox Code Playgroud)

但是,并非所有语言都具有相同的复数操作规则!例如,(原谅我在这里非常具体的例子)俄语中,用最后一个数字1结尾的数字修改的名词(即21,31,但不是 11)采用主格,结束于2-4的数字采用了genitive奇异,5+采取属性复数的情况.这将需要更严格的逻辑来处理如何以语法正确的方式复数特定名词,并且该逻辑与英语逻辑不匹配.因此,从理论上讲,我不能在Objective-C代码中使用语法逻辑,而应该在strings文件中使用语法逻辑.有没有办法做到这一点?人们如何为他们的应用翻译动态文本,以使其在语法上保持正确?

iphone localization internationalization localizable.strings ios

34
推荐指数
2
解决办法
1万
查看次数

Atos无法从归档应用程序的dSYM获取符号

我有BugSense的崩溃报告,因此我有关于崩溃的内存位置的信息,但它们没有象征性.此外,Bug Sense不会发送传统的崩溃报告,但仍会给我一个bug跟踪.因此,我尝试使用Atos来获取崩溃的确切位置.我已经在XCode 4中存档了应用程序并使用该版本提交到应用程序商店,因此我有一个dSYM文件.我运行了以下代码:

atos -arch armv7 -o MyApp.app.dSYM 0x001057e9
Run Code Online (Sandbox Code Playgroud)

但是,我没有得到正确的输出,而是收到错误:

atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7
Run Code Online (Sandbox Code Playgroud)

有关为什么会发生这种情况的任何建议?我没有从应用程序中删除调试符号.

crash xcode symbolicatecrash ios

34
推荐指数
1
解决办法
2万
查看次数

UISegmentedControl文本有多行?

如何使UISegmentedControl中的一个按钮中的文本跨越多行?

iphone xcode interface-builder uisegmentedcontrol ios

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

如何让iPhone应用程序用户提交崩溃报告?

可能重复:
iphone如何从客户那里获取崩溃日志?

我的一些用户报告崩溃.向他们解释如何向我发送崩溃报告的最佳方式是什么,以便它们显示在崩溃报告的iTunes Connect列表中?当用户将手机与电脑同步时,它们会被发送吗?谢谢!

iphone itunesconnect crash-reports ios

28
推荐指数
4
解决办法
3万
查看次数

刷新iOS应用收据:如何确定用户是否需要登录应用商店?

我正在iOS 7上实施Apple的"Grand统一收据",允许该应用程序在本地检查应用程序的购买收据,而无需联系Apple的服务器进行验证和验证.如果用户在应用程序中存储了收据,则此方法很有用.如果应用程序缺少收据,最佳做法是请求应用程序刷新收据,如下:

    SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init];
    [request setDelegate:self];
    [request start];
Run Code Online (Sandbox Code Playgroud)

问题是调用此代码将要求用户使用他或她的Apple ID登录.如果这种情况一直发生,或者只有当用户的应用程序商店登录超时时,我并不是100%确定.除非确实有必要,否则我不想向用户显示Apple ID登录屏幕 - 我不希望人们担心他们会被错误地收费.我想显示一个显示屏,告诉用户为什么会要求他们提供Apple ID密码,但前提是他们确实需要输入密码.如果他们不需要输入密码,我希望它是一个无缝且隐藏的过程.什么是最好的方法?我认为最好的方法是检查用户是否需要登录应用程序商店,但我不确定这是否可行.

iphone app-store storekit ios apple-id

24
推荐指数
3
解决办法
1万
查看次数