私が使用した最終的な解決策:このメソッドは私にはうまく機能せず、転送する必要のある変数が2つしかないため、NSNotificationCenterを使用してオブジェクトを送信することにしました。転送するオブジェクトが非常に少ない場合にのみこれを使用してください。そうしないと、非常に乱雑になる可能性があります。これについて詳しく知りたい場合は、この質問を確認することをお勧めします。NSNotificationGoodLuckを使用してNSString変数を他のクラスに渡します。
App Delegateからデータにアクセスしようとしていますが、常に(null)を取得しています。
編集:誰かが完全なコードを望んでいるなら、ここにあります:http: //pastebin.com/hNUPMcvB
AppDelegateのコードは次のとおりです。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// Stop Location Services
[locationManager stopUpdatingLocation];
// Some Reverse Geocoding...
CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
for (CLPlacemark * placemark in placemarks) {
City = [[placemark locality] stringByReplacingOccurrencesOfString:@" " withString:@"+"];
State = [[placemark administrativeArea] stringByReplacingOccurrencesOfString:@" " withString:@"+"];
Final = [NSString stringWithFormat:@"%@,%@", City, State];
currentLocation = [NSString stringWithFormat:@"%@", Final];
[self everythingelse];
NSLog(@"AAA%@", currentLocation);
}
}
];
}
これは、他のViewControllerからコードにアクセスする方法です。
ForecasterAppDelegate *BossMan = (ForecasterAppDelegate *)[[UIApplication sharedApplication] delegate];
CurrentLocation = BossMan.currentLocation;
NSLog(@"CCC%@", CurrentLocation);
常にCCC(null)としてログに記録されます。私のAppDelegateでは正しく表示されますが、他のViewControllerでは正しく表示されません。私は小さな間違いか大きな間違いのどちらかを犯しています、どんな助けでも素晴らしいでしょう!
編集:これが私のヘッダーファイルです:
My App Delegate .h:
@interface ForecasterAppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate> {
UIStoryboard *storyboard;
NSString *City, *State, *Final, *currentLocation;
NSMutableString *FinalQuery;
CLLocationManager *locationManager;
CLPlacemark * myPlacemark;
}
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic,retain) CLLocationManager *locationManager;
@property (nonatomic, retain) NSMutableString *FinalQuery;
@property (strong, nonatomic) NSString *currentLocation;
@property (nonatomic, retain) NSString *Final;
これが私のViewController.hファイルです。
@interface View1 : UIViewController <CLLocationManagerDelegate, LocationDamn> {
CLLocationManager *locationManager;
CLPlacemark * myPlacemark;
NSString *launchpath;
NSString *City, *State, *condition, *Final, *degreesign, *changeLocation, *currentLocations;
}
@property (nonatomic,retain) CLLocationManager *locationManager;
@property (nonatomic,retain) IBOutlet UILabel *currentTempLabel, *highTempLabel, *lowTempLabel, *conditionsLabel, *cityLabel, *day2c, *day3c, *currentconditions;
@property (nonatomic,retain) IBOutlet NSString *currentLocations;
@end
ViewControllerのviewdidloadには、次のものがあります。
[self performSelector:@selector(DoSomethingCool) withObject:nil afterDelay:1.5];
これにより、ロケーションマネージャーはロケーションを取得する時間ができます。