проблема с одноэлементными методами в Objective-C - PullRequest
0 голосов
/ 29 июня 2011

Я делаю синглтон, и A не может использовать методы для него ... тип аргументов неверен, по-видимому ... и есть много ошибок (ошибок) ...

Ошибки в комментариях (в коде)

В иностранном классе:

[ [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

Ответы [ 3 ]

5 голосов
/ 29 июня 2011
-(void)setAuth:(NSString) token;
-(NSString)getAuth;

должно быть

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

Кроме того, ваш ресурс безумен.На самом деле вы вызываете [super alloc], который даст вам объект неправильного типа.Проверьте , как реализовать синглтон в target-c для iphone , чтобы узнать, как лучше использовать синглтоны.

1 голос
/ 29 июня 2011

Заменить NSString на NSString* везде.

1 голос
/ 29 июня 2011

В вашем заголовочном файле отсутствует * для типа NSString.Например, оно должно быть:

-(void)setAuth:(NSString *) token;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...