gpt4 book ai didi

objective-c - 我怎样才能延迟十五秒?

转载 作者:行者123 更新时间:2023-12-03 17:53:39 26 4
gpt4 key购买 nike

我的程序通过 GPS 加载用户的当前位置并将其保存在 txt 文件中,以便通过电子邮件发送用于统计目的。我的问题是:

  • 第一次尝试在每次保存位置时给您 15 秒的延迟:

    [NSTimer SchedulerWithTimeInterval:15.0 target:self 选择器:@selector(locationManager:) userInfo:nil 重复:YES];

问题是这不起作用,并且不知道原因是什么。

  • 我的另一个问题是:如果文件太大......为此,我想命名创建的日期,并且每天都命名不同的日期。我尝试了很多方法,但什么也没得到。

代码:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

//Obtenemos las coordenadas.
latitud = newLocation.coordinate.latitude;
longitud = newLocation.coordinate.longitude;
precision = newLocation.horizontalAccuracy;

// Lo mostramos en las etiquetas
[latitudLabel setText:[NSString stringWithFormat:@"%0.8f",latitud]];
[longitudLabel setText:[NSString stringWithFormat:@"%0.8f",longitud]];
[precisionLabel setText:[NSString stringWithFormat:@"%0.8f",precision]];
tiempoLabel=[self.dateFormatter stringFromDate:newLocation.timestamp];
//NSLog(@"tiempo: %@",tiempoLabel);

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"textfile.txt"];
//[[NSFileManager defaultManager] removeItemAtPath:path error:nil];

// create if needed
if (![[NSFileManager defaultManager] fileExistsAtPath:path]){
[[NSData data] writeToFile:path atomically:YES];}

NSString *contents = [NSString stringWithFormat:@"tiempo: %@ latitude:%+.6f longitude: %+.6f precisión: %f\n",tiempoLabel,latitud,longitud,precision];

NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:path];
[handle truncateFileAtOffset:[handle seekToEndOfFile]];
[handle writeData:[contents dataUsingEncoding:NSUTF8StringEncoding]];}

感谢您的帮助。 StackOverflow 对我的项目帮助很大

最佳答案

您提出了两个不同的问题:

  1. 关于你的计时器,你有一个名为locationManager:的方法吗?您还没有展示该方法,因此它看起来非常可疑。如果您尝试调用 locationManager:didUpdateToLocation:fromLocation:,这是行不通的。 NSTimer@selector 不得有多个参数。您可以编写一个简单的计时器处理程序方法来调用您想要的任何方法,例如

    - (void)handleTimer:(NSTimer *)timer
    {
    // call whatever method you want here
    }

    然后你可以这样做:

    [NSTimer scheduledTimerWithTimeInterval:15.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES];

    请注意,重复计时器可能会导致循环引用,因此,如果您计划在某个时候关闭此计时器,您可能需要保留对计时器的引用,以便稍后可以使其无效(例如在viewDidDisappear中)。

    话虽如此,我同意不要每 15 秒写一次的建议,但我会使用 desiredAccuracydistanceFilter控制何时调用位置管理器委托(delegate)方法。每x秒记录一次位置是消耗用户电池的好方法。有关其他电池节省指南,请参阅 Tips for Conserving Battery位置感知编程指南

  2. 关于你的第二个问题,

    • 您不需要执行“如果需要则创建”代码;和

    • 写入文件时,不需要 NSFileHandle 代码;您只需使用 NSString 实例方法 writeToFile:atomically:encoding:error: (顺便说一句,其中包含一个 NSError 参数,您可以检查文件写入是否成功)。

关于objective-c - 我怎样才能延迟十五秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com