我有一个包含许多includeKeys的查询,这些指针指向另一个类.从解析云接收数据后,所有记录都使用pinAll方法存储在本地.当我取回存储的结果时,我可以获取记录但不包括指针.请参阅下面的示例代码
[query includeKey:@"classOne.innerClass"];
[query includeKey:@"classTwo.innerClass"];
[query includeKey:@"classThree"];
[query includeKey:@"classFour"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
[PFObject pinAllInBackground:objects withName:@"LocalRecords" block:^(BOOL succeeded, NSError *error) {
}];
}];
Run Code Online (Sandbox Code Playgroud)
我正在取得像这样的记录
PFQuery *lquery = [PFQuery queryWithClassName:[ClassName parseClassName]];
[lquery fromPinWithName:@"LocalRecords"];
BFTask *btask = [[lquery findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) {
if (task.error) {
NSLog(@"Error: %@", task.error);
return task;
}
}];
Run Code Online (Sandbox Code Playgroud)
当我尝试访问classOne,classTwo,classThree和classFour中的任何列时,由于未捕获的异常'NSInternalInconsistencyException',我得到一个异常终止应用程序,原因:'Key'name"没有数据.在获取其值之前调用fetchIfNeeded.
我试图保存一个PFObject具有PFFile属性的.我正在使用新的Local Datastore for iOS,所以我想PFObject用这个saveEventually()方法保存它.
我遇到的问题是该saveEventually()方法似乎不喜欢保存PFFiles.我试着saveEventually()没有PFFile附加任何物体,这很好用.一旦我PFFile重新连接,Xcode会抛出几个断点通知(错误?)但是没有终止应用程序,看起来好像一切顺利 - 但是对Parse数据浏览器的检查确认保存没有通过.
在本地数据存储功能之前,我不相信这种保存是可能的 - 它会抛出"Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile."错误.似乎本地数据存储区功能已修复此问题,因为它在iOS本地数据存储区文档中声明:
"固定PFObject是递归的,就像保存一样,所以你固定的对象所指向的任何对象也都会被固定.当一个对象被固定时,每次通过获取或保存新数据来更新它时,复制到本地数据存储区将自动更新.您根本不需要担心它."
我已将SDK更新到最新版本(v1.6.2).有任何想法吗?
我也在dispatch_async中执行了Parse.enableLocalDatastore() - 我仍然有警告.
即使我在warnParseOperationOnMainThread上添加了一个符号断点,它也不会破坏
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
Parse.enableLocalDatastore()
Parse.setApplicationId("XXX", clientKey: "YYY")
PFAnalytics.trackAppOpenedWithLaunchOptionsInBackground(launchOptions, block: nil )
var defaultACL = PFACL()
defaultACL.setPublicReadAccess(true)
defaultACL.setPublicWriteAccess(false)
PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser:true)
CAUser.registerSubclass()
NSLog("App finish loading")
dispatch_async(dispatch_get_main_queue()){
() -> Void in
// any UI updates need to happen in here back on the main thread
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
感谢有人向我强调,为避免此警告消息缺少什么?
我Parse.com用作我的应用程序的后端.他们还提供了一个本地数据库来存储信息,作为替代SQLite.
我想通过解析将电话号码添加到我的数据库中.在添加数字之前,我需要检查数据中是否已存在该数字,因此我findInBackground()用来获取与我想要添加的数字相匹配的数字列表.如果列表为空,则我想要添加的数字在数据库中不存在.
执行此操作的方法是:
public void putPerson(final String name, final String phoneNumber, final boolean isFav) {
// Verify if there is any person with the same phone number
ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseClass.PERSON_CLASS);
query.whereEqualTo(ParseKey.PERSON_PHONE_NUMBER_KEY, phoneNumber);
query.fromLocalDatastore();
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> personList,
ParseException e) {
if (e == null) {
if (personList.isEmpty()) {
// If there is not any person with the same phone number add person
ParseObject person = new ParseObject(ParseClass.PERSON_CLASS);
person.put(ParseKey.PERSON_NAME_KEY, name);
person.put(ParseKey.PERSON_PHONE_NUMBER_KEY, …Run Code Online (Sandbox Code Playgroud) 我目前在我的ios项目中添加了解析后端,并将其定义为与其本地数据存储一起使用.这一切似乎工作得很好,除非有时我收到"这个对象在离线缓存中不可用",据我所知,当使用本地数据存储时根本没有缓存(在我的AppDelegate中启用它像这样:[解析enableLocalDatastore];).问题是如果我重新打开应用程序,最终将成功检索该对象.以前有人遇到过这个问题吗?
编辑:我做的电话的顺序是
PFQuery *query = [PFQuery queryWithClassName:className];
[query fromLocalDatastore];
[query whereKey:someKey equalTo:someObject];
[query includeKey:@"someKey1"];
[query includeKey:@"someKey2"];
[query orderByAscending:@"date"];
[query findObjectsInBackground];
Run Code Online (Sandbox Code Playgroud)
它为ios sdk 8.0构建并解析sdk 1.7.2
谢谢!
当我尝试保存PFObject没有网络连接时,它已成功保存在本地,每当我再次使用网络连接启动应用程序时,似乎该对象将保存到服务器,但所有参数都为空.
我正在执行以下过程,首先我创建一个PFObject具有不同值并调用saveEventually.在这些步骤中,我没有互联网连接(飞行模式已打开),因此无法保存到服务器并在本地保存.
PFObject *contact = [PFObject objectWithClassName:@"Contact"];
[contact setObject:[PFUser currentUser] forKey:kRelatedToUserKey];
[contact setObject:self.firstname forKey:kFirstnameKey];
[contact setObject:self.lastname forKey:kLastnameKey];
[contact saveEventually];
Run Code Online (Sandbox Code Playgroud)
现在,我正在关闭应用程序并再次启动它,我正在加载我的联系人.我正在使用firstname,lastname等所有正确值返回正确的对象.
PFQuery *postQuery = [PFQuery queryWithClassName:@"Contact"];
[postQuery whereKey:@"related_to_user" equalTo:[PFUser currentUser]];
[postQuery fromLocalDatastore];
[postQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
// here I get back the correct object from local storage, with all values
}
}];
Run Code Online (Sandbox Code Playgroud)
现在,当我关闭飞机模式时,它会尝试将对象保存到服务器,但我在后端看到的只是一个没有任何值的objectId.

而本地保存的对象具有所有正确的值.
我最近开始使用Parse-Server并迁移了我的Parse App,现在当我尝试使用Parse Local DataStore时,我收到以下错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Method requires Pinning enabled.'
这是产生错误的代码:
PFQuery *query = [PFQuery queryWithClassName:@"MY_CLASS_NAME"];
[query fromPinWithName:@"PIN_NAME"];
[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
Run Code Online (Sandbox Code Playgroud)
如果我通过调用初始化解析旧方法:
[Parse setApplicationId:@"APP_ID" clientKey:@"KEY"];
Run Code Online (Sandbox Code Playgroud)
然后本地DataStore工作正常,但如果我初始化Parse新方法然后我得到错误:
[Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> configuration) {
configuration.applicationId = @"APP_ID";
configuration.clientKey = @"KEY";
configuration.server = @"SERVER";
}]];
Run Code Online (Sandbox Code Playgroud)
[Parse enableLocalDatastore];在Parse被初始化之前我正在打电话,我已经尝试过以后调用它只是为了确定.
感谢您的时间,希望您能提供帮助
自 6 个月以来,我将 Parse.com 与我的 iOS 应用程序(用 Swift 编写)一起使用,出于多种原因,我想使用 Parse 本地数据存储:
为了做到这一点,我想编写一个全局函数来处理我在应用程序中执行的所有查询的这些场景。
我已经对函数应该做什么有了一个具体的想法,但我不知道如何在技术上编写这个函数:)
注册/登录(链接多个查询):
加载应用程序(链式多个查询):
触发更新(简单查询):
登出 :