2015-04-12 65 views
0

我正在使用Parse和geofencing處理應用程序。我有一個地理圍欄對象,看起來像這樣:使用Parse保存CLCircularRegion

Geofence.h - >

@interface Geofence : PFObject<PFSubclassing> 
+ (NSString *) parseClassName; 
@property (nonatomic, retain) CLCircularRegion * region; 

@end 

Gefence.m - >

#import "Geofence.h" 
#import <Parse/PFObject+Subclass.h> 

@implementation Geofence 

+ (void) load { 
    [self registerSubclass]; 
} 

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

@dynamic region; 

@end 

在我AddGeofenceClass,我設置了地理圍欄通過調用我的私人方法setUpGeofence:

self.region = [self setUpGeofence:self.longitude.doubleValue:self.latitude.doubleValue]; 

self.region正在設置,但當我嘗試設置區域ob使用Parse JECT這裏:

[self.geofence setObject:self.region forKey:@"region"]; 

我得到的錯誤:

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',理由是: 'PFObject值可能沒有等級:CLCircularRegion'

有誰知道如何解決這個問題?

+1

我不確定Parse是否支持任何對象類型。我的猜測是你必須保存一個CLLocation對象和一個半徑值,然後使用它們重新創建你的CLCircularRegion。 –

回答

1

您不能在Parse中放入任何對象類型。如果我創建了一個名爲「MyClass」的課程,我不能只說:

[self.parseObject setObject:instanceOfMyClass forKey:@"MyClass"]; 

解析不知道如何處理它。我會建議做的是使用保存在一個PFGeoPoint中心點:

PFGeoPoint *point = [PFGeoPoint geoPointWithLatitude:yourRegionsCenterLatitude longitude:yourRegionsCenterLongitude]; 
[self.parseObject setObject:point forKey:@"CenterPoint"]; 

然後你就可以在解析另一列名爲「半徑」,你可以在另一列是數字類型的,像這樣保存:

[self.parseObject setObject:[NSNumber numberWithFloat:regionRadiusAsFloat] forKey:@"Radius"]; 

然後,您可以稍後在查詢中檢索它們,並使用中心和半徑重建該區域。