使用委託我已經得到了想要使用CLLocationManager和它的一些委託方法一類方法。類方法,Objective-C的
什麼是訪問從類方法的委託方法的最佳方式,因爲我沒有真正的實例級別的「自我」?我可以實例化一個自我,作爲委託,這將讓委託方法運行,但沒有說明如何獲取數據出來使用。什麼是最好的方法?
// desired end function, which runs a block when location is found
[SFGeoPoint geoPointForCurrentLocationInBackground:^(SFGeoPoint *geoPoint, NSError *error) {
if (!error) {
// do something with the new geoPoint
NSLog(@"GeoPoint: %@", geoPoint);
}
}];
// SFGeoPoint class, key points
static CLLocationManager *_locationManager = nil;
// get geo point for current location and call block with it
+ (void) geoPointForCurrentLocationInBackground:(void (^)(SFGeoPoint*, NSError*)) locationFound {
SFGeoPoint *point = [[SFGeoPoint alloc] init];
_locationManager = [[CLLocationManager alloc] init];
// ?????????
_locationManager.delegate = self; // this gives a warning about incompatible pointer type assigning Delegate from Class;
_locationManager.delegate = point; // could work, but how to get feedback?
_locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[_locationManager startUpdatingLocation];
[_locationManager startUpdatingLocation];
locationFound(point, nil);
}
/////////// Core Location Delegate
+ (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
[_locationManager stopUpdatingLocation];
if (_locationBlock) {
_locationBlock(newLocation);
}
}
「這行不通」什麼「不工作」呢? – newacct
在類方法中,我不能沒有得到一個大約兼容的指針類型從類分配委派警告分配「自我」的委託。這是一個好點,它不是一個錯誤,但可以使我的工作意識到。儘管如此,我更喜歡下面解決方案的佈局,因爲我仍然可以訪問類中定義的實例變量,而不需要靜態變量。 – Miro
這是一個警告,因爲類對象名義上沒有實現協議。您可以通過投射到'id':'=(id)self'來擺脫警告。從概念上講,兩者並沒有太大區別,只是在這種情況下,您將類對象本身用作委託而不是某個實例,從而節省了創建另一個對象的必要性。 – newacct