كيف يمكنني جلب بسيط سلمان مجموعة من السلاسل باستخدام restkit
-
20-12-2019 - |
سؤال
سؤالي هو نسخة مكررة من
RestKit:كيفية جلب بسيط سلمان مجموعة من السلاسل ؟
ومع ذلك ، في حين أن المؤلف الأصلي العثور على إجابات مفيدة, أنا لا تزال مفقودة.هذا السؤال ملامح اثنين من منفصلة المراجع ، أي من الذي ذهبت بعيدا بما فيه الكفاية أن تساعدني (مبتدئا كاملة في KVC
و RestKit
).
مرجع واحد هو هنا ويعطي هذا المثال رمز
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];
ما هو مهما فئة من المفترض أن تكون ؟ يجب أن يكون NSString?أو هل هذا يعني أنني يجب أن إنشاء المجمع الفئة التي لديها خاصية واحدة وهي NSArray *?
وما هو @"someAttribute" من المفترض أن تكون ؟ مرة أخرى, هل هذا يعني التفاف الطبقة في هذه الحالة someAttribute أن يكون اسم مكان الإقامة على المجمع الدرجة التي NSArray *?
غيرها من الإشارة إلى هنا وعلى الرغم من أنه يظهر جلب من مجموعة في "المجمع فئة" المجمع فئة واحدة فقط NSNumber لا صفيف.لذلك ليس من الواضح كيفية تشغيل هذا المثال إلى أحد أن يعمل من أجل الحصول على مجموعة كاملة.
للإشارة الملقم إرجاع صفيف سلاسل تماما مثل الأصلي السؤال:["string1", "string2", "string3"].
التحديث
هنا هو رمز لقد حاولت.لقد خلق المجمع الدرجة.
@interface CannedResponse : NSObject
@property (strong, nonatomic) NSString * response;
@end
هنا هو رسم الخرائط:
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[CannedResponse class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:RESPONSES_API_PATH keyPath:nil statusCodes:nil;
و أنا أتصل getObjectsAtPathForRouteName
ما أنا على الحصول على العودة هو مجموعة من CannedReponses
كما هو متوقع.ومع ذلك بدلا من NSString
التي وضعت في الاستجابة الملكية.أنا الحصول على RKMappingSourceObject
.الآن RKMappingSourceObject
لا بل تحتوي على السلسلة الصحيحة.
سأكون تبحث من خلال RestKit
تسجيل الدخول في وحدة التحكم لمعرفة ما إذا كنت يمكن استخلاص بعض القرائن.
تحديث#2
كما ذكر هنا قبل blakewatters أنا لا أفعل أي رسم الخرائط في هذا المثال و يمكن تجاوز مجرد استخدام RestKit
.المشكلة هي أن كل رمز أكتب في خدمة طبقة باستخدام RestKit
و كنت عمياء التالية النمط على جميع المكالمات.لهذا ندعو الجواب الصحيح قد يكون لمعرفة كيفية الوصول AFNetworking
مباشرة.
المحلول
هنا هو إجابة أفضل استخدام آخر تعليق من blakewatters هنا
لا تستخدم RestKit على طلب مثل هذا.استخدام AFNetworking أن تفعل ذلك.و يمكنك الوصول إلى AFHTTPClient مثل هذا
[RKObjectManager sharedManager].HTTPClient
رمز فقط ثم يبدو شيئا من هذا القبيل
AFHTTPClient * client = [RKObjectManager sharedManager].HTTPClient;
[client getPath:YOUR_PATH
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
success([NSArray arrayWithArray:responseObject]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(operation.response.statusCode);
}];
نصائح أخرى
اتضح أن الطريقة أنا أفعل ذلك في التحديث القسم لا يعمل.
على RKMappingSourceObject كان مضللا.وتنفذ NSProxy وبالتالي فإنه يتصرف مثل NSString كنت أتوقع.
أعتقد أن ما يجري وراء الكواليس:RestKit إنشاء RKMappingSourceObject الحالات كما هو تسلسل.عندما يدرك أن هذه الأشياء التي لدي هي الأوليات و لا خريطة أي شيء هو فقط يجعلهم في رسم وجوه, ولكن منذ ذلك تنفذ NSProxy فإنه يمكن إرسال أي طلبات الأساسية السلسلة.