инициировать мой собственный класс API - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть класс API, давайте назовем его MyClass, который я хочу использовать во всем приложении. Поэтому я поместил #import в MyProject-Prefix.pch файл.

Теперь, когда я (в моем appDelegate) инициирую класс, я получаю сообщение об ошибке cannot init a class object.. Я понимаю, что я начинаю свой класс неправильно, но я понятия не имею, как мне это сделать ... и, поскольку это не является обычным явлением для развития (как я понимаю), не так много информации, чтобы найти ее через Google (или я ищу неправильно;))

Итак, у меня два вопроса:

  1. Есть ли ссылки для "Создание Objective-C API для Dummys"? ;)
  2. Быстро просматривая мой код, что я делаю не так?

Это мой класс: MyClass.h

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>

#import "NSStringAdditions.h"
#import "XMLRPCResponse.h"
#import "XMLRPCRequest.h"
#import "XMLRPCConnection.h"
/**
 * END required libs
 */

extern int EID;
extern NSString * SHARED_SECRET;
extern NSString * MODE;

@interface MyClass : NSObject

+ (id)initWithEid:(int)eid secret:(NSString*)secret mode:(NSString*)mode;
+ (NSArray*)web_invoice_infoWithOCR:(NSString*)ocr pno:(NSString*)pno;
+ (NSString*)the_digest:(NSString*)source;

@end

MyClass.m

#import "MyClass.h"

@implementation MyClass

int EID;
NSString * SHARED_SECRET;
NSString * MODE;

NSString * URL_LIVE;
NSString * URL_BETA;

#pragma mark init / dealloc

+ (id)init {
    self = [super init];
    if (self)
    {

    }
    return self;
}

+ (id)initWithEid:(int)eid secret:(NSString*)secret mode:(NSString*)mode
{
    self = [super init];
    if (self)
    {
        if (![[mode lowercaseString] isEqualToString:@"beta"] && ![[mode lowercaseString] isEqualToString:@"live"])
        {
            @throw ([NSException exceptionWithName:@"Invalid mode" reason:[NSString stringWithFormat:@"Invalid mode '%@' selected. Should either be 'beta' or 'live'", mode] userInfo:nil]);
        }

        EID = eid;
        SHARED_SECRET = secret;
        MODE = [mode lowercaseString];
    }

    return self;
}

+ (NSArray*)web_invoice_infoWithOCR:(NSString*)ocr pno:(NSString*)pno {    
    NSArray *params = [NSArray arrayWithObjects:ocr, EID, pno, [MyClass the_digest:[NSString stringWithFormat:@"%d:%@:%@", EID, ocr, SHARED_SECRET]], nil];

    NSLog(@"Array: %@", params);

    return params;
}

- (id)xmrpc_call_function:(NSString*)method parameters:(NSArray*)params
{
    // Not finished yet, Warning exists
}
[...]

Посмотрев на мой код, вы заметите функцию инициализации + (id). Я пытался -(id)init, -(id)initialize, +(id)initialize, +(void)initialize, -(void)initialize.

Вот как я «загружаю» свой класс в мой AppDelegate:

[MyClass initWithEid:1234 secret:@"1234" mode:@"BETA"];

EDIT
Я пытаюсь начать свой класс таким же образом, например, Шквал делает. Пример:

[FlurryAnalytics startSession:@"1234"];

1 Ответ

3 голосов
/ 09 сентября 2011

Вы должны выделить его первым:

MyClass *myClass = [[MyClass alloc] initWithEid:1234 secret:@"1234" mode:@"BETA"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...