2011-10-21 6 views
1

デリゲートメソッドを起動するのに問題があります。それはARCに関係している場合はそう思って、他のプロジェクトのために正常に動作するために使用しますデリゲートメソッドは起動しません(null)。 ARCの使用

@class Location; 
@protocol LocationDelegate 
- (void)location:(Location*)location foundLocation:(CLLocation*)location; 
- (void)location:(Location*)location failedToLocateUserWithError:(NSError*)error; 
@end 

@interface Location : NSObject { 
    __unsafe_unretained id <LocationDelegate> delegate; 
} 

@property (nonatomic, assign) id <LocationDelegate> delegate; 

@end 

... 
@implementation Location 

@synthesize delegate; 

- (void)startUpdatingLocation { 
    NSLog(@"%@", delegate); // prints '(null)' 
    ... 

} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%@", delegate); // prints '(null)' 
    [delegate location:self foundLocation:newLocation]; 
} 

@end 

:私は、次のコードを持っていますか? Locationを割り当てるオブジェクトはLocationDelegateに従います。私はまた、代議員を自己に設定しています。しかし、デリゲートメソッドはただ発射していないので、出力すればnullです。あなたがここに貼り付けてきたばかりのコードから

おかげ

答えて

0

は、私はあなたのデリゲートに上に保持されて(保持参照)を参照してくださいしないでください。

貼り付けたものはすべて、このコードでデリゲートを保持しないように外出することを示しています。

あなたがそれを望むなら、他の場所に残っていることを確認することをお勧めします。そうでなければ、誰も強力な(保持された)委任先を持たないので、それを解放する。

Locationを割り当てるオブジェクトは、LocationDelegateに準拠しています。 I デリゲートをselfに設定しています。

誰がそのオブジェクトを強く参照していますか?

+0

私は(非原子的、強)に変更しようとしましたが、unsafe_unretainedはありません。 – runmad

+0

象牙を取り除く。デリゲートを参照している行(この例のように、 '[delegate location ....')では、代わりに 'self.delegate'を使います。 – Steve

+0

まだ何も/ null – runmad

0

割り当て先はどこですかLocation代理人を割り当てましたか? 例: Location *location = [[Location alloc] init]; location.delegate = self;

+0

彼は具体的に言った:「私もデリゲートを自分に任せている」 – Steve

+0

はい、私はそれをすべてやっています。 – runmad

+0

@protocol LocationDelegateの後にを追加してみてください – Rick

関連する問題