Web sunucu api'imi çağırmak için Restkit ile çalışmaya çalışıyorum ama işler çalışmıyor. Denetleyicim sadece etkinlik göstergesini gösterir ve hiçbir şey olmuyor.Three20 Entegrasyonu ile RestKit
Ben örneğin, üst 50 videoları bulur varsayalım bir API çağrısı var: http://example.com/services/getTop50Video
dönüş biçiminde geçerli:
<results>
<mysql_host>72.9.41.97</mysql_host>
<results>
<title/>
<views/>
<video_id>j2xFxHgENt4</video_id>
<thumbnail>http://img.youtube.com/vi/j2xFxHgENt4/2.jpg</thumbnail>
<url/>
</results>
...
</results>
My App temsilci Kod:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Configure RestKit Object Manager
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://example.com/services"];
RKObjectMapper* mapper = objectManager.mapper;
[mapper registerClass:[YouTubeVideo class] forElementNamed:@"video"];
// Other non relevant stuff
}
TWYouTubeVideo Class:
@implementation TWYouTubeVideo
@synthesize title = _title;
@synthesize numberOfViews = _numberOfViews;
@synthesize videoID = _videoID;
@synthesize thumbnailURL = _thumbnailURL;
+ (NSDictionary*)elementToPropertyMappings {
return [NSDictionary dictionaryWithKeysAndObjects:
@"title", @"title",
@"views", @"numberOfViews",
@"video_id", @"videoID",
@"thumbnail", @"thumbnailURL",
nil];
}
My Denetleyici kodu:
-(id) initWithResourcePath:(NSString*) requestedResourcePath
{
if (self = [super init])
{
self.resourcePath = requestedResourcePath;
}
return self;
}
- (void)createModel {
self.model = [[[RKRequestTTModel alloc] initWithResourcePath:self.resourcePath] autorelease];
}
- (void)didLoadModel:(BOOL)firstTime {
[super didLoadModel:firstTime];
RKRequestTTModel* model = (RKRequestTTModel*)self.model;
NSMutableArray* items = [NSMutableArray arrayWithCapacity:[model.objects count]];
for (YouTubeVideo* video in model.objects) {
TableSubtitleItem *item = [TableSubtitleItem itemWithText:video.title
subtitle:[NSString stringWithFormat:@"%@ views", video.numberOfViews]
imageURL:video.thumbnailURL
defaultImage:[YouTubeVideo defaultThumbnail]
URL:nil
accessoryURL:nil];
[items addObject:item];
}
// Ensure that the datasource's model is still the RKRequestTTModel;
// Otherwise isOutdated will not work.
TTListDataSource* dataSource = [TTListDataSource dataSourceWithItems:items];
dataSource.model = model;
self.dataSource = dataSource;
}
Ve Kontrol iterek:
SecondYouTubeController* viewController = [[SecondYouTubeController alloc] initWithResourcePath:@"/getTop50VideoXML?json=true"];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
Birincisi, ben bir şekilde ayrıştırıcı anlatmak gerekiyor galiba o video nesneler bir "yanıt" düğümü içinde görünür. İkincisi, tüm çağrıları gerektiği gibi yaptığından emin değilim.
Burada yardımcı olmaktan memnuniyet duyarım.
RKRequestTTModel, Ana yol özelliği yok. başka bir nesneyi mi kastettin? Ve evet, örneği xml'de gösterdim, ama aslında bir JSON yanıtı alıyorum. – Idan
no, değil, ama bunun için bir başlatıcı var: - (id) initWithResourcePath: (NSString *) resourcePath params: (NSDictionary *) params objectClass: (Sınıf) klass keyPath: (NSString *) keyPath; – Jerceratops
Veya, erişimciyi ekleyebilir, yalnızca modeli görünüm denetleyicileri modeli olarak ayarlamadan önce ayarladığınızdan emin olun. – Jerceratops