سؤال

أنا متأكد من أن هناك طريقة للقيام بذلك باستخدام الكتل ، لكن لا يمكنني معرفة ذلك. أريد أن أحول NSDictionary إلى سلسلة من المعلمات على غرار URL. إذا كان لدي nsdictionary يشبه هذا:

dict = [NSDictionary dictionaryWithObjectsAndKeys:@"blue", @"color", @"large", @"size", nil]];

ثم كيف يمكنني تحويل ذلك إلى سلسلة تشبه هذا:

"color=blue&size=large"

تعديل

شكرا على القرائن أدناه. هذا يجب أن يفعل ذلك:

NSMutableString *parameterString;
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parameterString appendFormat:@"%@=%@&", key, obj];
}];
parameterString = [parameterString substringToIndex:[string length] - 1];
هل كانت مفيدة؟

المحلول

نفس الحل تمامًا ولكن بدون السلسلة الفرعية:

NSMutableArray* parametersArray = [[[NSMutableArray alloc] init] autorelease];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [parametersArray addObject:[NSString stringWithFormat:@"%@=%@", key, obj]];
}];
NSString* parameterString = [parametersArray componentsJoinedByString:@"&"];

نصائح أخرى

قم بإنشاء سلسلة قابلة للتغيير ، ثم تكرار القاموس للحصول على كل مفتاح. ابحث عن قيمة هذا المفتاح ، وأضف ملف key=value& إلى السلسلة. عند الانتهاء من تلك الحلقة ، قم بإزالة آخر و.

أفترض أن هذا سيتم تغذيته من خلال عنوان URL ، ستحتاج أيضًا إلى الحصول على بعض الطرق التي تشفر خيوطك ، في حالة احتوائها على عناصر مثل و +، إلخ.

NSMutableString* yourString = @"";

for (id key in dict) {
     [yourString appendFormat:@"%@=%@&", key, ((NSString*)[dict objectForKey:key])];
}

NSRange r;
r.location = 0;
r.size = [yourString length]-1;
[yourString deleteCharactersInRange:r];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top