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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
residentkms
21 / 21 / 8
Регистрация: 20.10.2013
Сообщений: 138
Завершенные тесты: 1
#1

Глубокое копирование - Программирование iOS

09.05.2014, 18:14. Просмотров 842. Ответов 5
Метки нет (Все метки)

Суть проста. Нужно скопировать массив ,включая вложенные массивы и объекты. Реализовать то реализовал. Да вот только смущает меня подобный метод реализации. Проперти пришлось задавать посредством геттеров и сеттеров, по скольку при копировании методом copy (newTile = [[Tile alloc]initWithTile:[tiles[i][j] copy]];) приложение вываливалось. Кто что скажет?
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
NSMutableArray *tiles;
NSMutableArray *lastStep;
NSNull *noTile;
........
//Копирование
    lastStep = [[NSMutableArray alloc]init];
    for (int j = 0; j < 5; j++) {
        NSMutableArray *subarray = [[NSMutableArray alloc]init];
        for (int i = 0; i < 5; i++) {
            if ([self validTileX:i  andY:j]) {
                Tile *newTile = [[Tile alloc]init];
                Tile *oldTile = [[Tile alloc]initWithTile:tiles[i][j]];
                newTile.position = oldTile.position;
                newTile.value = oldTile.value;
                [newTile updateValue];
                [subarray addObject:newTile];
            }else{
                [subarray addObject:noTile];
            }
        }
        [lastStep addObject:subarray];
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 18:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Глубокое копирование (Программирование iOS):

Копирование объектов - Objective-C
Добрый день! Обнаружил, что я не понимаю каких-то очень базовых вещей. Был бы очень рад, если бы мне подсказали :) Столкнулся с...

Глубокое копирование объектов с интерфейсами - C#
Подскажите пожалуйста, если класс наследует интерфейсы, то как реализовать его глубокое копирование. Проблема в том что в интерфейсах не...

Глубокое копирование пользовательского элемента управления - C#
Здравствуйте! Ну вопрос практически описан в шапке. Есть пользовательский контрол. Надо сделать его глубокую копию. Поскольку это...

Как выполнять глубокое копирование объектов? - Python
Вообщем возникла проблема при копирование объектов. Перешёл с С++ на питон. Появилась необходимость скопировать объект. В С++ для таких...

Глубокое клонирование объектов не работает - JavaScript
Всем привет. Я на этапе обучения, дошел вот до темы с объектами, увидел пример с клонированием, и решил написать небольшой код, который бы...

Глубокое изучение NET CLR - .NET
Всем привет! Поделитесь книгами или ресурсами с актуальной информацией о &quot;кишках&quot; NET CLR ! Если кто читал, есть такая книга Селлз...

5
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
09.05.2014, 18:22 #2
Для того, чтобы при посылке сообщения -copy приложение не "вываливалось", нужно чтобы класс поддерживал этот метод.
Objective-C
1
- (void)copy;
Это метод у NSObject класса.
Из документации:
This is a convenience method for classes that adopt the NSCopying protocol. An exception is raised if there is no implementation for copyWithZone:.
Метод
Objective-C
1
- (id)copyWithZone:(NSZone *)zone;
это метод протокола NSCopying. Его и смотрите.
Разберитесь как реализовывать его для стороннего класса(допустим вашего Tile) и пользуйтесь.
Например так:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@interface Tile : NSObject <NSCopying>
 
@property (nonatomic, copy) NSString *property1;
@property (nonatomic) NSUInteger property2;
 
@end
 
@implementation Tile
 
- (id)copyWithZone:(NSZone *)zone {
    Tile *obj = [Tile new];
    obj.property1 = self.property1;
    obj.property2 = self.property2;
    return obj;
}
 
@end
1
residentkms
21 / 21 / 8
Регистрация: 20.10.2013
Сообщений: 138
Завершенные тесты: 1
09.05.2014, 18:43  [ТС] #3
Спасибо, а есть ли метод, позволяющий осуществить глубокое копирование без перебора массива?
Я находил что то вроде про NSDeepCopying, но реализовать с ним ничего не получилось, поскольку была какая то ошибка.
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
10.05.2014, 12:56 #4
residentkms, NSDeepCopying - нет такого.
Только если сами реализуете...

По этой ссылке вы можете найти то, что вам возможно пригодится:
If you need a true deep copy, such as when you have an array of arrays, you can archive and then unarchive the collection, provided the contents all conform to the NSCoding protocol. An example of this technique is shown in Listing 3.

Listing 3 A true deep copy

NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
0
residentkms
21 / 21 / 8
Регистрация: 20.10.2013
Сообщений: 138
Завершенные тесты: 1
10.05.2014, 12:58  [ТС] #5
Цитата Сообщение от zulkis Посмотреть сообщение
residentkms, NSDeepCopying - нет такого.
Только если сами реализуете...
По этой ссылке вы можете найти то, что вам возможно пригодится:
If you need a true deep copy, such as when you have an array of arrays, you can archive and then unarchive the collection, provided the contents all conform to the NSCoding protocol. An example of this technique is shown in Listing 3.
Listing 3 A true deep copy
NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
Вот именно это я и находил. Но возникала ошибка, связанная с NSCoder.
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
10.05.2014, 13:07 #6
Цитата Сообщение от residentkms Посмотреть сообщение
Вот именно это я и находил. Но возникала ошибка, связанная с NSCoder.
Ну так методы из протокола нужно реализовать, как написано ...
provided the contents all conform to the NSCoding protocol
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 13:07
Привет! Вот еще темы с ответами:

Более глубокое изучение php, куда двигаться? - PHP ООП
На данный момент я не плохо знаком с php, но знаком только с чистым php, т.е. отлично усвоил основы. В ближайшее время хочу повысить свой...

Глубокое клонирование объекта, содержащий массив объектов - Java SE
Добрый вечер. Есть перечисление MyEnum и класс с массивом перечислений class A{ MyEnum enum; public GameState clone()...

Копирование определенного текста из файла, копирование и вставка в статичную переменную - C#
Доброго вечера. Делаю программу которая бы выводила погоду на сегодня через данные сайта. Завис на передаче данных с сайта. Как можно...

Копирование одного текстового файла в другой, используя посимвольное, построчное и поблочное копирование - C (СИ)
Здраствуйте, у меня такая проблемма мне надо обеспечить копирование одного текстового файла в другой, используя посимвольное, построчное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
10.05.2014, 13:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru