سؤال

ما زلت جديدًا على البرمجة ، لذا لدي سؤال إلى حد ما. عندما يكون لديك متغير مثيل ، في حالتي من نوع CllocationManager ، في ملف appDelegate.m الخاص بي ، اعتقدت أنه يمكنني تخصيص وتهيئة متغير مثيل CllocationManager الخاص بي في طريقة ApplicationDidFinishLaunching. وبعد ذلك يمكنني استخدام زر لبدء التشغيل بطريقة مختلفة (لأنني أسميها من فئة أخرى). لا يبدو أن هذا يعمل وأعتقد أنني بحاجة إلى تخصيص/init بنفس الطريقة التي أقوم بها. هل هذا صحيح؟ هل أحتاج إلى إيقاف التشغيل في نفس الطريقة؟ الكود الخاص بي أدناه:

(locationManager is declared as a property)


- (void)stopUpdating {
    [locationManager stopUpdatingLocation];
}

- (double)distanceTraveled {
    return distanceTraveled;
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window addSubview:rootController.view];    
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [window makeKeyAndVisible];
}

- (void)startUpdating {
    [locationManager startUpdatingLocation];
}

يبدو أنني يجب أن أفعل ذلك أكثر مثل:

- (void)startUpdating {
locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}

إذا كان من المفترض أن أفعل ذلك في هذه الطريقة الثانية ، فهل ذلك لأن نطاق كائن CllocationManager هو فقط للطريقة الموجودة فيه؟ اعتقدت أن امتلاكه كمتغير مثيل ، سأتمكن من استخدامه في طرق أخرى ويمكن أن يكون لدي طريقة منفصلة لبدء التشغيل وإيقاف التوقف. شكرًا.

هل كانت مفيدة؟

المحلول

ما كنت تعتقد في الأصل صحيح. إذا كان لديك متغير مثيل يبقى المتغير متاحًا لك طوال عمر الكائن (في هذه الحالة مندوب التطبيق الخاص بك).

إذا كان ما تفعله لا يعمل ، فهذا بسبب بعض القضايا الأخرى. لا تحتاج إلى تخصيص CllocationManager جديد في كل مرة تتصل فيها بالبدء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top