2011-09-09 55 views
0

我有一個API類,讓我們稱之爲MyClass,我想在我的整個應用程序中可用。因此我將#import放入MyProject-Prefix.pch文件。初始化我自己的api類

現在,當我(在我的appDelegate中)啓動該類時,我收到錯誤消息cannot init a class object.。 我明白我是不正確地啓動我的類,但我不知道我應該怎麼做......因爲這不是常見的發展(因爲我看到它)沒有很多信息來找到thrue谷歌(或我錯了搜索;))

所以,我有兩個問題:

  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"]; 

編輯
我試圖啓動我的課以相同的方式如亂舞呢。例如:

[FlurryAnalytics startSession:@"1234"]; 

回答

3

首先,您需要的Alloc它:

MyClass *myClass = [[MyClass alloc] initWithEid:1234 secret:@"1234" mode:@"BETA"]; 
+0

好吧......現在覺得很愚蠢......我應該已經看到了一個。但是,如果我看一下,例如Flurry ...,你可以使用'FlurryAnalytics startSession:@「1234」];''來啓動亂七八糟的功能。他們怎麼能這樣做? –

+0

Flurry使用類方法'startSession:'創建一個單例,然後他們只是調用您調用的任何類方法的單例。 – rckoenes

+0

啊,好的。我明白了......我會爲此尋找一點。日Thnx。 –