ios - 子类化 PFObject : Proper way to override dynamic getter?

标签 ios objective-c parse-platform

我使用 PFObject 的以下子类:

//HEADER FILE
#import <Parse/Parse.h>

@interface ParseMenuItem : PFObject <PFSubclassing>

@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSString * menuItemDescription;
@property (nonatomic, strong) NSArray * menuPortions; //Some other PFObjects...
@property (nonatomic, strong) NSArray * categories; //NSStrings

//...

@end


//IMPLEMENTATION FILE
#import <Parse/PFObject+Subclass.h>
#import "ParseMenuItem.h"
@implementation ParseMenuItem

@dynamic name, menuItemDescription, menuPortions, categories;

+ (NSString*) parseClassName {
    return @"MenuItem";
}

//...

@end

每次我尝试访问 menuItem.categoriesmenuItem.menuPortions在哪里 menuItemParseMenuItem 类型的获取对象, 异常(exception) Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Key "categories" / "menuPortions" has no data. Call fetchIfNeeded before getting its value.'被提出。

如何自定义这些属性的 getter,以便在需要时自动获取数据?

我不知道动态生成的 getter 是什么样子的,所以我不知道我必须写什么来用一些自定义的 getter 替换它们。

有没有办法在我提供的那个中调用动态生成的?

最佳答案

在访问之前,您需要先检查 key 以查看它是否已定义/是否有数据。让它在 getter 中获取数据是一个好主意,但它必须是异步的,所以除非你提供一个 block ,否则它不能返回值。

您也许可以定义一个至少可以安全检查而不会抛出的 getter:

-(NSString *) menuItemDescription {
  if (menuItemDescription) {
    return menuItemDescription;
  }
  return nil;
}

编辑:您是否尝试过在 setter 中进行阻塞获取?就像是:
-(NSArray *) categories {
  if (!categories) {
    [self fetchIfNeeded];
  }
  if (!categories) {
    return nil;
  }
  return categories;
}

关于ios - 子类化 PFObject : Proper way to override dynamic getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23128146/

相关文章:

parse-platform - 如何让 require() 在 Parse Cloud Code 中使用 node_modules?

ios - AVAssetExportSession exportAsynchronouslyWithCompletionHandler 返回失败

ios - UINavigationBar 从大标题跳到小标题,同时推送到带有嵌入式 UITableView iOS 11 的 UIViewController

ios - Xamarin 在方向更改时形成 iOS 图像转到角落

iphone - UITableViewController 内的 UIButton

ios - 使用 Xcode 6.2 获取 ibtool 失败,错误代码为 255

ios - 从应用程序检索的数据显示的数据与解析数据浏览器不同

ios - IOS中如何开启 map 导航?

iphone - 调整 UIView 的大小

javascript - 解析具有限制的 "or"查询返回忽略单个查询限制的所有记录