Parse object 保存数据但无法访问它直到我 quit/relogin iOS
Parse object saves data but can't access it until I quit/relogin iOS
我在 iOS 应用程序的后端使用 Parse。作为该应用程序的一部分,用户可以转到地图,提取地址,通过选择坐标勾勒出形状,然后命名 属性。您设置名称的 VC 是您设置大纲的那个之后的那个。当我设置名称时,它会立即正确显示在 Parse 的数据控制台中,但是当我在其他地方访问该名称时,它会显示为空白。与 属性 关联的所有其他数据都正常。当我重置应用程序并重新登录时,属性 名称再次出现。我不明白为什么它一开始没有出现。我首先保存所有关于 属性 的数据,然后像这样概述它:
[Lawn setObject:paths forKey:@"paths"];
[Lawn setObject:self.addressLabel.text forKey:@"address"];
[Lawn setObject:self.SQFT.text forKey:@"sizeOfLawn"];
[Lawn setObject:user forKey:@"user"];
[Lawn setObject:@"" forKey:@"propertyName"];
[Lawn setObject:[PFGeoPoint geoPointWithLatitude:self.serviceAreaMapView.camera.target.latitude longitude:self.serviceAreaMapView.camera.target.longitude] forKey:@"location"];
[Lawn save];
[user addObject:Lawn forKey:@"Lawns"];
NSLog(@"Added lawn with ID %@ to user with ID %@", [Lawn objectId], [user objectId]);
[user save];
效果很好,当我过渡到下一个 VC 时,我的所有数据都显示在我的数据浏览器中。在下一个视图控制器上,我有一个文本字段,用户可以在其中输入 属性 的名称。当他们点击保存时,我像这样保存数据:
NSLog(@"(property details) Lawn objectID = %@", [Lawn objectId]);
[Lawn fetchIfNeeded];
[Lawn setObject:self.propertyNameTextField.text forKey:@"propertyName"];
[Lawn save];
[self performSegueWithIdentifier:@"propertyDetailsNext" sender:self];
我的输出显示我正在保存到正确的草坪,这也反映在数据控制台中。当我转到下一个屏幕时,草坪已经更新为 属性 名称。
几 VC 秒后,我有一个再次显示 属性 的视图控制器。使用此代码:
_address.text = [Lawn valueForKey:@"address"];
self.navigationItem.title = [Lawn valueForKey:@"propertyName"];
我设置了一个标签,其中包含我存储在 VC 中勾勒出草坪的地址,并将导航栏上的标题设置为我保存的 属性 的名称。但是,名称显示为空白。所有其他信息,包括基于与草坪一起保存的坐标的正确形状映射,都显示正常,只是 属性Name 字符串没有显示。它是 Parse 数据控制台中的一个字符串,地址也是如此。我不明白为什么一个显示正常而另一个显示不正常。
我的应用程序中还有其他地方尝试使用 属性 名称,但它也显示为空白。其他数据拉的很好
这一切都会继续,直到我重置应用程序并再次登录。 属性名称在任何地方都显示正常。
有什么关于我可能做错的提示吗?
谢谢。
这是因为您正在使用 save
并立即执行 segue。我不认为保存可以那么快。
如果你使用 [saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {}];
块方法并将你的 segue 放在那个块的旁边,它应该可以工作。
像这样
[saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
[self performSegueWithIdentifier:@"propertyDetailsNext" sender:self];
} else {
//Log your error here
}
}];
我在 iOS 应用程序的后端使用 Parse。作为该应用程序的一部分,用户可以转到地图,提取地址,通过选择坐标勾勒出形状,然后命名 属性。您设置名称的 VC 是您设置大纲的那个之后的那个。当我设置名称时,它会立即正确显示在 Parse 的数据控制台中,但是当我在其他地方访问该名称时,它会显示为空白。与 属性 关联的所有其他数据都正常。当我重置应用程序并重新登录时,属性 名称再次出现。我不明白为什么它一开始没有出现。我首先保存所有关于 属性 的数据,然后像这样概述它:
[Lawn setObject:paths forKey:@"paths"];
[Lawn setObject:self.addressLabel.text forKey:@"address"];
[Lawn setObject:self.SQFT.text forKey:@"sizeOfLawn"];
[Lawn setObject:user forKey:@"user"];
[Lawn setObject:@"" forKey:@"propertyName"];
[Lawn setObject:[PFGeoPoint geoPointWithLatitude:self.serviceAreaMapView.camera.target.latitude longitude:self.serviceAreaMapView.camera.target.longitude] forKey:@"location"];
[Lawn save];
[user addObject:Lawn forKey:@"Lawns"];
NSLog(@"Added lawn with ID %@ to user with ID %@", [Lawn objectId], [user objectId]);
[user save];
效果很好,当我过渡到下一个 VC 时,我的所有数据都显示在我的数据浏览器中。在下一个视图控制器上,我有一个文本字段,用户可以在其中输入 属性 的名称。当他们点击保存时,我像这样保存数据:
NSLog(@"(property details) Lawn objectID = %@", [Lawn objectId]);
[Lawn fetchIfNeeded];
[Lawn setObject:self.propertyNameTextField.text forKey:@"propertyName"];
[Lawn save];
[self performSegueWithIdentifier:@"propertyDetailsNext" sender:self];
我的输出显示我正在保存到正确的草坪,这也反映在数据控制台中。当我转到下一个屏幕时,草坪已经更新为 属性 名称。
几 VC 秒后,我有一个再次显示 属性 的视图控制器。使用此代码:
_address.text = [Lawn valueForKey:@"address"];
self.navigationItem.title = [Lawn valueForKey:@"propertyName"];
我设置了一个标签,其中包含我存储在 VC 中勾勒出草坪的地址,并将导航栏上的标题设置为我保存的 属性 的名称。但是,名称显示为空白。所有其他信息,包括基于与草坪一起保存的坐标的正确形状映射,都显示正常,只是 属性Name 字符串没有显示。它是 Parse 数据控制台中的一个字符串,地址也是如此。我不明白为什么一个显示正常而另一个显示不正常。
我的应用程序中还有其他地方尝试使用 属性 名称,但它也显示为空白。其他数据拉的很好
这一切都会继续,直到我重置应用程序并再次登录。 属性名称在任何地方都显示正常。
有什么关于我可能做错的提示吗?
谢谢。
这是因为您正在使用 save
并立即执行 segue。我不认为保存可以那么快。
如果你使用 [saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {}];
块方法并将你的 segue 放在那个块的旁边,它应该可以工作。
像这样
[saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
[self performSegueWithIdentifier:@"propertyDetailsNext" sender:self];
} else {
//Log your error here
}
}];