Форум программистов, компьютерный форум CyberForum.ru

Быстрое обращение к данным многомерных словарей - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C In-app purchases http://www.cyberforum.ru/objective-c/thread899981.html
Всем добрый вечер. Я впервые сталкиваюсь с In-app purchases, у меня такой вопрос. Я так понял, что тестировать In-app purchases можно, только если создан тестовый пользователь. Клиент предоставил Provisioning Profile для приложения, но как проверить, создан ли тестовый пользователь? И что ещё нужно для тестирования на устройстве?
Objective-C Наложение изображений на фотографию Привет всем! Есть какие-нибудь хорошие решения в сети, для вот такой задачи: наложение изображения на фотографию(ну например на фотографию маску бетмена наложить и сохранить в библиотеке, ну и все подобное), с перетаскиванием изображений из списка(в моем случае из горизонтального скролла), с возможностью менять размер изображений, поворачивать и изменять положение. Ну либо что-то по... http://www.cyberforum.ru/objective-c/thread899552.html
Objective-C необычная просьба, оформить открытку.Все по теме ветки)
вообщем идея такая, просьба посдказать как оформить это в objective - c, туго с программингом, просто друг пишет на objective-c, помогите пожалуйста, буду очень благодарен, текст зафигачу в самодельную открытку.Помогите, вывешу труды сюда) класс Поздравление метод: быть довольным жизнью(счастье, хорошее настроение, спокойствие, super) каждый день=счастье*хорошее настроение*спокойствие^100...
Письмо со ссылкой Objective-C
Добрый вечер! Отправляю письмо через метод openURL. Как добавить в текст письма кликабельную ссылку?
Objective-C Программирование под iOS http://www.cyberforum.ru/objective-c/thread896668.html
Здравстувуйте, нужна книга: "Программирование под iOS. Для профессионалов" Дж. Конвэй, А. Хиллегасс Питер 2013. ISBN: 978-5-4461-0102-3, в эл. виде, любом. Всё что смог найти, это пару битых ссылок на скачивание, и пару демо версий, одна скачалась, но не открылась(битый файл).
Objective-C картинку загнать в четырёхугольник Всем добрый вечер! Нужно написать такой метод, у которого на входе была бы картинка и массив из 8-ми чисел - координаты 4-х точек прямоугольника, в который нужно загнать эту картинку. Точки будут находится не на одной линии, т.е угол картинки может быть любым. Никто не сталкивался с таким? Может есть уже написанный метод? подробнее

Показать сообщение отдельно
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583

Быстрое обращение к данным многомерных словарей - Objective-C

15.06.2013, 11:24. Просмотров 3122. Ответов 39
Метки (Все метки)

предлагаю на рассмотрение следующий метод работы с данными многомерных словарей

рассматриваются словари, чья многомерная структура состоит из словарей и массивов

1) сокращенные методы получения данных из словарей и массивов
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// DKeyClass test version
 
#import <Foundation/Foundation.h>
 
@interface NSDictionary (NSDictionaryDkey)
 
-(id) key: (id) key;
 
@end
 
@interface NSArray(NSArrayDkey)
 
-(id) index: (int) index;
 
@end
данные методы зеркально отражают стандартные objectForKey: и objectAtIndex:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// DKeyClass test version
 
#import "DkeyClass.h"
 
@implementation NSDictionary(NSDictionaryDkey)
 
-(id)key:(id)key {
    return  [self objectForKey:key];
}
@end
 
@implementation NSArray(NSArrayDkey)
 
-(id)index:(int)index {
    if (index>=self.count || index<0) {
        NSLog(@"DkeyClass ARRAY ERROR index at %d (max=%d) \n %@",index,self.count-1,self);
        return nil;
    }
    return [self objectAtIndex:index];
}
@end
дополнительно в метод index: добавлен логический блок проверки индекса, который не допускает внезапного завершения приложения из-за неверного индекса

2) примеры кода, показывающие удобство использования сокращенных конструкций key-index
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// уровень 1
 
[_dict1 objectForKey:@"s1"];
 
[_dict1 key:@"s1"];
 
// уровень 2
 
[[_dict1 objectForKey:@"k1"] objectAtIndex:1];
 
[[_dict1 key:@"k1"] index:1];
 
// уровень 3
 
[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"s3"];
 
[[[_dict1 key:@"k1"] index:0] key:@"s3"];
 
// уровень 4
 
[[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"k3"] objectForKey:@"s4"];
 
[[[[_dict1 key:@"k1"] index:0] key:@"k3"] key:@"s4"];
3) тестовая программа

Быстрое обращение к данным многомерных словарей

состоит из кнопок на которые назначены действия показа данных через NSLog

в программе заполняется многомерный словарь состоящий из 4 уровней

1 - словарь
2 - массив
3 - словарь
4 - словарь

структура

Быстрое обращение к данным многомерных словарей

исходный код программы

ViewController.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//
//  ViewController.h
//  test_dict4
//
//  Created by Mac on 6/15/13.
//  Copyright (c) 2013 Mac. All rights reserved.
//
 
#import <UIKit/UIKit.h>
#import "DkeyClass.h"
 
@interface ViewController : UIViewController<UIAlertViewDelegate>
- (IBAction)b1:(id)sender;
- (IBAction)b2:(id)sender;
- (IBAction)b3:(id)sender;
- (IBAction)b4:(id)sender;
- (IBAction)indexerror:(id)sender;
 
- (IBAction)obj1:(id)sender;
- (IBAction)obj2:(id)sender;
- (IBAction)obj3:(id)sender;
- (IBAction)obj4:(id)sender;
- (IBAction)indexobjError:(id)sender;
 
@property NSMutableDictionary* dict1;
 
@end
ViewController.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//
//  ViewController.m
//  test_dict4
//
//  Created by Mac on 6/15/13.
//  Copyright (c) 2013 Mac. All rights reserved.
//
 
#import "ViewController.h"
 
@interface ViewController ()
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _dict1 = [NSMutableDictionary new];
    NSMutableArray * a2 = [NSMutableArray new];
    NSMutableDictionary * d3 = [NSMutableDictionary new];
    NSMutableDictionary * d4 = [NSMutableDictionary new];
    
    
    // дерево словарей заполнено
    [_dict1 setObject:a2 forKey:@"k1"];
    [a2 addObject:d3];
    [d3 setObject:d4 forKey:@"k3"];
    
    // заполняем словари строковыми данными
    
    [_dict1 setObject:@"level1" forKey:@"s1"];
    [a2 addObject:@"level2 array"];
    [d3 setObject:@"level3" forKey:@"s3"];
    [d4 setObject:@"level4" forKey:@"s4"];
 
    
    NSLog(@"текущая структура словарей %@",_dict1);
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
#pragma mark черезКлючи
 
- (IBAction)b1:(id)sender {
    id obj = [_dict1 key:@"s1"];
   
    NSLog(@"KEY МЕТОД строка уровень 1 \n%@", obj);
}
 
- (IBAction)b2:(id)sender {
    id obj = [[_dict1 key:@"k1"] index:1];
    
    NSLog(@"KEY МЕТОД строка уровень 2 \n%@", obj);
}
 
- (IBAction)b3:(id)sender {
    id obj = [[[_dict1 key:@"k1"] index:0] key:@"s3"];
    
    NSLog(@"KEY МЕТОД строка уровень 3 \n%@", obj);
}
 
- (IBAction)b4:(id)sender {
    id obj = [[[[_dict1 key:@"k1"] index:0] key:@"k3"] key:@"s4"];
    
    NSLog(@"KEY МЕТОД строка уровень 4 \n%@", obj);
}
 
- (IBAction)indexerror:(id)sender {
    // запрашиваем ошибочный индекс
    [[_dict1 key:@"k1"] index:2];
    
}
 
#pragma mark стандартный метод
 
- (IBAction)obj1:(id)sender {
    id obj = [_dict1 objectForKey:@"s1"];
    
    NSLog(@"СТАНДАРТНО строка уровень 1 \n%@", obj);
}
 
- (IBAction)obj2:(id)sender {
    id obj = [[_dict1 objectForKey:@"k1"] objectAtIndex:1];
    
    NSLog(@"СТАНДАРТНО строка уровень 2 \n%@", obj);
}
 
- (IBAction)obj3:(id)sender {
    id obj = [[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"s3"];
    
    NSLog(@"СТАНДАРТНО строка уровень 3 \n%@", obj);
}
 
- (IBAction)obj4:(id)sender {
    id obj = [[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"k3"] objectForKey:@"s4"];
    
    NSLog(@"СТАНДАРТНО строка уровень 4 \n%@", obj);
}
 
- (IBAction)indexobjError:(id)sender {
    UIAlertView *a = [[UIAlertView alloc] initWithTitle:nil message:@"приложение сейчас прекратит работу из-за неверного индекса массива" delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
    [a show];
    
}
 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
   // запрашиваем ошибочный индекс
   [[_dict1 objectForKey:@"k1"] objectAtIndex:2];
}
 
@end
лог после запуска программы

Bash
1
2
3
4
5
6
7
8
9
10
11
12
2013-06-15 09:46:43.865 test_dict4[709:c07] текущая структура словарей {
    k1 =     (
                {
            k3 =             {
                s4 = level4;
            };
            s3 = level3;
        },
        "level2 array"
    );
    s1 = level1;
}
Вложения
Тип файла: zip test_dict4.zip (38.4 Кб, 4 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru