12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Parse iOS SDKでPFObjectのサブクラスを登録し忘れないようにする

Last updated at Posted at 2014-02-02

Parseのデータは、PFObjectを使ってアクセスすることができますが、
PFObjectのサブクラスを作るとデータのフィールドを明示したりコード補完することができ、大変便利です。

Subclasses

サブクラスを定義しアプリで利用するためには、Subclassing PFObject の通りの手順を行わないといけないのですが、
クラス定義と登録が別なので、最後の手順で作成したサブクラスのヘッダーをインポートし、AppDelegateregisterSubclassを呼ばないと行けないというのをよく忘れがちです。

original.m
// Armor.h
@interface Armor : PFObject<PFSubclassing>
+ (NSString *)parseClassName;
@end
 
// Armor.m
// Import this header to let Armor know that PFObject privately provides most
// of the methods for PFSubclassing.
# import <Parse/PFObject+Subclass.h>
 
@implementation Armor
+ (NSString *)parseClassName {
  return @"Armor";
}
@end
 
// AppDelegate.m
# import <Parse/Parse.h>
# import "Armor.h"               // これと
 
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [Armor registerSubclass];     // この箇所
  [Parse setApplicationId:parseAppId clientKey:parseClientKey];
}

いちいちAppDelegateで登録を行わなくても、サブクラスがロードされた時に登録すればいいと気づいたので、+(void)loadを使って登録を行うようにしました。

new.m
// Armor.h
@interface Armor : PFObject<PFSubclassing>
+ (NSString *)parseClassName;
@end
 
// Armor.m
// Import this header to let Armor know that PFObject privately provides most
// of the methods for PFSubclassing.
# import <Parse/PFObject+Subclass.h>
 
@implementation Armor
// クラスロード時に登録を行う
+ (void)load {
    __weak typeof(self) weakSelf = self;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [weakSelf registerSubclass];
    });
}

+ (NSString *)parseClassName {
  return @"Armor";
}
@end
 
// AppDelegate.m
# import <Parse/Parse.h>
//#import "Armor.h"               // これと
 
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//  [Armor registerSubclass];     // これはいらない
  [Parse setApplicationId:parseAppId clientKey:parseClientKey];
}

これで、サブクラス登録を忘れてデータにアクセスできずしばらくデバックするはめになるという悲しいことになりにくくなりました。
タイピングするのが面倒というのであれば、XcodeかDashのSnippetに登録するとよいでしょう

pfobjectregsiter.png

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?