我剛開始接觸目標C和Restkit代表不工作(Restkit有關?)
我創建了一個示例應用程序,並添加了RKRequestDelegate在MyAppDelegate文件
@interface MyAppDelegate : NSObject <UIApplicationDelegate, RKRequestDelegate> {…
,並添加
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[client get:@"/titles.json" delegate:self];
在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions method
到MyAppDelegate.m
我還添加了一個方法來MyAppDelegate.m
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
到目前爲止好一切工作,我看到在輸出從我的Rails應用程序的結果!
由於這些東西不屬於MyAppDelegate.m,我將這些東西放入我的模型中。在我Titles.h我加
@interface Titles : NSManagedObject <RKRequestDelegate> {
和Titles.m我加
+ (void) update {
[[RKClient sharedClient] get:@"/titles.json" delegate:self];
}
和
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
在我MyAppDelegate.m我代替:
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[client get:@"/titles.json" delegate:self];
與
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[Titles update];
當我現在運行我沒有得到任何輸出。 我把幾個斷點,一個在- (void)didFinishLoad:(RKResponse*)response
在RKRequest文件 ,那邊如果測試:
if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}
,而它在我的第一次嘗試成功失敗(當一切都在MyAppDelegate)
我檢查調試器中的變量_delate和它說:_delegate = MyAppDelegate在我的第一次嘗試和_delegate =在我第二次嘗試的標題(都喜歡它應該)
爲什麼該respondsToSelector失敗? (委託是正確的,方法在標題中存在)
非常感謝羅布,我做了一點 測試通過使'更新'實例方法和創建一個對象 標題*標題= [標題分配]; [標題更新]; ,它的工作原理。 但是我不明白你對DataModel類的解釋。你能否詳細說明。我的課堂標題是NSManagedObject(使用核心數據),它將存儲不同相冊的所有標題。我使用類方法的原因是,像我在測試中那樣製作一個對象是愚蠢而不是好設計。 – Glenn
這是一個奇怪的設計。爲什麼你有一個特殊的NSManagedObject包含其他對象的屬性?這似乎與Core Data有關。我想你會有一個'Collection'或'AlbumCollection'來容納'Album'對象。然後你可以使用'[collection allTitles]'返回標題,如果你需要它作爲一個字符串列表。 –
我的解釋不是很明顯... 我有以下類:藝術家(屬性:名稱,stage_name,生日,...)和關係has_and_belongs_to_many專輯,專輯(屬性:名稱,年份,封面)has_many標題...所有這些都是NSManagedObjects。我希望他們每個人都有一個類方法更新,我會在應用程序的開始時調用它。該方法會將數據與Rails應用程序同步。 – Glenn