Ios 从locationManager:didUpdateLocations分配类属性
我有一个属性为的类Ios 从locationManager:didUpdateLocations分配类属性,ios,objective-c,cllocationmanager,Ios,Objective C,Cllocationmanager,我有一个属性为的类 @property (strong,nonatomic) NSString* test1; .m文件 -(void)doStuff { userLocationManager = [[CLLocationManager alloc]]init]; //has been synthesized already userLocationManager.delegate = self; userLocationManager.distanceFilter = kCLDistan
@property (strong,nonatomic) NSString* test1;
.m文件
-(void)doStuff
{
userLocationManager = [[CLLocationManager alloc]]init]; //has been synthesized already
userLocationManager.delegate = self;
userLocationManager.distanceFilter = kCLDistanceFilterNone;
userLocationManager.desiredAccuracy = kCLLocationAccuracyBest;
[userLocationManager startUpdatingLocation];
NSLog(@"%@",self.test1); //logs (null)
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
self.test1 = @"Hello!";
[userLocationManager stopUpdatingLocation];
}
然后,我有一个初始化locationmanager的类,等等。我最终调用locationmanager:didUpdateLocations。
然后在这个方法中执行一个简单的self.test1=@“Hello”
,看看是否可以从该函数中分配字符串。在另一种方法中,我使用NSLogself.test1
,查看它是否已更新,但我在控制台中得到(null)
。locationManager:didUpdateLocations
是异步的还是什么?
谢谢
~z~嘶嘶作响
编辑:添加了更多的代码以使问题更清楚。请原谅我从另一台计算机上复制代码时出现的语法错误。它编译得很好。确保您的类是CLLocationManagerDelegate的委托。您能提供更多信息吗?它应该可以工作,不是异步的。您是否在.m文件中的某个地方设置了类似viewDidLoad的委派?代码应该是这样的;CLLocationManager*locationManager=[[CLLocationManager alloc]init];locationManager.delegate=self;[locationManager startUpdatingLocation];在日志中,您的字符串可能会在委托方法之前被调用,这可能就是您得到空结果的原因。只需在didUpdateLocations中记录一些内容,查看它是否在您的类中调用。更新了我的代码。此外,我可以确认该方法已启动。奇怪的是,它在我发布的代码的第8行之后记录了日志。好吧,你的问题正是我告诉你的。在[userLocationManager startUpdatingLocation]行之后,您的NSLog将与委托方法同时激发。因此,在设置字符串之前会触发NSLog。哦,这很有意义,谢谢!但是我如何修复它,或者确保字符串已设置?