2011-06-29 10 views
0

私はシングルトンをやっていて、Aはそれにメソッドを使用できません...引数の型は明らかに正しくありません...多くの間違い(エラー)があります...Objective-Cのシングルトンのメソッドの問題

エラーが外国クラスで

(コードで)コメントしている:私のシングルトンのクラスで

[ [MySingleton sharedMySingleton] setAuth:@"test"]; //incompatible type for argument 1 of setAuth 
NSLog([ [MySingleton sharedMySingleton] getAuth]); //Incompatible type for argument 1 os NSLOG 

#import <Foundation/Foundation.h> 


@interface MySingleton : NSObject { 

    NSString *myToken; 

} 

+(MySingleton*)sharedMySingleton; 

-(void)setAuth:(NSString) token; 
-(NSString)getAuth; 

@property (nonatomic, retain) NSString *myToken; 

@end 

...と...

#import "MySingleton.h" 

@implementation MySingleton 

static MySingleton* _sharedMySingleton = nil; 
@synthesize myToken; 

+(MySingleton*)sharedMySingleton 
{ 
    @synchronized([MySingleton class]) 
    { 
     if (!_sharedMySingleton) 
      [[self alloc] init]; 

     return _sharedMySingleton; 
    } 

    return nil; 
} 

+(id)alloc 
{ 
    @synchronized([MySingleton class]) 
    { 
     NSAssert(_sharedMySingleton == nil, @"Attempted to allocate a second instance of a singleton."); 
     _sharedMySingleton = [super alloc]; 
     return _sharedMySingleton; 
    } 

    return nil; 
} 

-(id)init { 
    self = [super init]; 
    if (self != nil) { 
     // initialize stuff here 
    } 

    return self; 
} 

-(void)setAuth:(NSString) token { // Can not use as abject as parameter to a method 
    myToken=token;// incomatible types in assignment 
} 

-(NSString)getAuth { // can not use an object as parameter to a method 
    return myToken;// incomatible types in return 
} // control reaches end of non-void function 


@end 

答えて

5
-(void)setAuth:(NSString) token; 
-(NSString)getAuth; 

はまた、あなたのallocはクレイジーです

-(void)setAuth:(NSString*) token; 
//     ^note a pointer is needed 
-(NSString*)getAuth; 
//  ^note a pointer is needed 

でなければなりません。実際に[super alloc]を呼び出すと、間違ったタイプのオブジェクトが表示されます。シングルトンを改善する方法については、how to implement singleton in objective-c for iphoneを参照してください。

+1

最後に、ちょっと説明して、ちょうど "a'が見つかりませんでした "という回答は – vikingosegundo

+0

ありがとうございました。私はそれをチェックします! – clement

1

NSStringタイプのヘッダーファイルには、*がありません。例えば、それは次のようになります。

-(void)setAuth:(NSString *) token; 
1

どこでもNSString*NSStringを交換してください。

関連する問題