0
我目前正在拉取與其綁定位置信息的「比賽」對象列表。我想監視我在附近的所有比賽。通過委託方法攜帶自定義屬性
for(Contest *contest in contests) {
NSMutableDictionary * fence1 = [NSMutableDictionary new];
[fence1 setValue:contest.event.name forKey:@"identifier"];
[fence1 setValue:[NSString stringWithFormat:@"%f", contest.location.latitude] forKey:@"latitude"];
[fence1 setValue:[NSString stringWithFormat:@"%f", contest.location.longitude] forKey:@"longitude"];
[fence1 setValue:@"1000" forKey:@"radius"];
//the below method returns a CLRegion object
CLRegion *region = [self dictToRegion:fence1];
//adding custom contest object to region
region.contest = contest;
[self.locationManager requestStateForRegion:region];
}
我也想自定義比賽財產綁在區域(如上面的代碼所示),但它似乎並沒有在委託方法didDetermineState結轉:
-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
switch (state) {
case CLRegionStateUnknown:
NSLog(@"Unknown state!");
break;
case CLRegionStateInside:
NSLog(@"Inside state!");
//this comes back as null
NSLog(@"%@", region.contest.name);
break;
case CLRegionStateOutside:
NSLog(@"Outside state!");
break;
default:
break;
}
}
在委託方法中,region.contest返回爲(null)。有更好的方法嗎?
附錄(我的類別CLRegion): CLRegion + Contest.h:
#import <CoreLocation/CoreLocation.h>
#import "Event.h"
#import "Contest.h"
@interface CLRegion (Loopd)
@property (nonatomic, strong) Event *event;
@property (nonatomic, strong) Contest *contest;
@end
CLRegion + Contest.m:
#import "CLRegion+Loopd.h"
#import <objc/runtime.h>
static char defaultHashKey;
@implementation CLRegion (Loopd)
@dynamic event;
@dynamic contest;
-(Event*) event {
return objc_getAssociatedObject(self, &defaultHashKey);
}
- (void) setEvent:(Event *)event {
objc_setAssociatedObject(self, &defaultHashKey, event, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(Contest*) contest {
return objc_getAssociatedObject(self, &defaultHashKey);
}
- (void) setContest:(Contest *)event {
objc_setAssociatedObject(self, &defaultHashKey, event, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
所以這通常是一個不好的方法?順便說一句,我仍然爲關聯的對象爲空。 – Allen
我確認它使用你的代碼設置/獲取作品,但是在被調用的委託方法中,競爭對象不再與從委託方法返回的區域對象關聯 – Allen
我意識到委託方法不會返回相同的對象...所以似乎沒有很好的解決這個問題的方法! – Allen