/ / Priradenie seba k CLLocationManager.delegate generuje nekompatibilné typové varovanie - iphone, xcode, varovania, cllocationmanager

priradenie seba k CLLocationManager.delegate generuje varovanie nekompatibilného typu - iphone, xcode, warnings, cllocationmanager

Aplikácia, na ktorej momentálne pracujem nejaký čas bez chýb pri zostavovaní, mi od upgradovania na xCode 4 dávala varovanie o nekompatibilnom type pre posledný riadok tohto kódu ...

locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.delegate = self;

Legrační na tom je, že po vyčistenía stavať, xCodes správy žiadne problémy. Ak však pôjdem do triedy, ktorá obsahuje tento kód, objaví sa náhle chyba zostavenia a zostane, kým znova nevyčistím.

skutočné varovanie je ...

Varovanie: Sémantické vydanie: Nekompatibilné typy ukazovateľov priradené k „id“ z „Class“

CLLocationmanager funguje dobre a moje delegátske metódy sa volajú, takže sa zdá, že všetko funguje správne. Chcel by som sa tohto varovania zbaviť. Mal by som to jednoducho ignorovať?

odpovede:

2 pre odpoveď č. 1

Myslím, že by ste mali podať hlásenie o chybe u spoločnosti Apple a kým s tým niečo neurobia, myslím, že všetko, čo môžete urobiť, je ignorovať.


24 pre odpoveď č. 2

Vyhlásili ste svoj delegovaný objekt za dodržiavanie protokolu CLLocationManagerDelegate? Obvykle to robím v rozšírení triedy namiesto súboru záhlavia pre MyObject.

@interface MyObject()<CLLocationManagerDelegate>
@end

alebo Swift

@objc class MyObject: NSObject, CLLocationManagerDelegate
{
// implement whichever of the optional protocol functions you need
}

4 pre odpoveď č. 3

Nekonzistentné varovania sa javia ako chyba. Skutočnou otázkou však je, či selfTrieda vo vyššie uvedenom kóde bola vyhlásená za implementujúcu CLLocationManagerDelegate protokol. Ak implementujete správne metódy, potom to bude fungovať bez ohľadu na to, ako je deklarovaný. Ak však vyhlásenie o triede nezahŕňa <CLLocationManagerDelegate> v tom sa kompilátor sťažuje. Ak to nemáte, potom by ste mali opraviť vyhlásenie triedy.


2 pre odpoveď № 4

Myslím, že musíte do svojho súboru .h pridať súbor CLLocationManagerDelegate

@interface MyViewController : UIViewController <CLLocationManagerDelegate>

2 pre odpoveď № 5

Mám rovnakú situáciu.

pridajte riadok pod, potom varovné hlásenie zmizne.

#import <CoreLocation/CLLocationManagerDelegate.h>