Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: не работает delegate

Всем привет, у меня такая проблема, не получается написать делегат. По задумке есть 2 вью контроллера, в одном из них есть UItextBox, в который юзер вводит число с плавающей точкой, и кнопка. Число должно передаваться в другой вью контроллер по нажатию кнопки и выводиться там в UIabel. Но этого не происходит. Я тут выложил свой код, подскажите, что я неправильно делаю?
FirstViewController.h
Код

#import <UIKit/UIKit.h>
#import "DelegateProtocol.h"
@interface FirstViewController : UIViewController{
 IBOutlet UITextField *textfield1, *textfield2;
   __unsafe_unretained id <DelegateProtocol> _delegate;

}
@property (nonatomic, assign) id <DelegateProtocol> delegate;
- (IBAction) ButtonClick:(id) sender;
@end
;


FirstViewController.m
Код

#import "FirstViewController.h"

/*@interface FirstViewController ()

@end*/

@implementation FirstViewController
@synthesize delegate=_delegate;
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction) ButtonClick:(id) sender{
    float g = [textfield1.text floatValue];
    [self.delegate SendA:g];
    
}

@end



Код

#import <UIKit/UIKit.h>
#import "DelegateProtocol.h"
#import "FirstViewController.h"
@interface SecondViewController : UIViewController<DelegateProtocol> {
    float _a, _b;
    IBOutlet UILabel * Alabel, *Blabel;
}
@property float a, b;
@end


SecondViewController.m
Код

#import "SecondViewController.h"

/*@interface SecondViewController  ()

@end*/

@implementation SecondViewController
@synthesize a=_a;
- (void)viewDidLoad
{
    [super viewDidLoad];
    FirstViewController * testAppViewController = [[FirstViewController alloc] init];
    testAppViewController.delegate = self;
    // Do any additional setup after loading the view, typically from a nib.
}
-(void) SendA:(float) A{
    self.a = A ;
    NSString *str = [NSString stringWithFormat:@"%f", self.a];
    [Alabel  setText:str];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Ответ:
Всё, спасибо, всё получилось. Переопределил UITabBarController и использовал его в качестве буфера(сделал его делегатом).
Вопрос: Аудио работает только в эмуляторе

Здравствуйте уважаемые форумчане. Недавно занялся разработкой под iOS, так что возможно код не написан наиболее оптимальным путем.
Столкнулся со следующей проблеммой, звук работает в эмуляторе, но когда проверяю на iPadе, звука нет. причем прогресс бар движется, минутки тикают, можно поставить на паузу и продолжить, но никакого звука. В чем может быть проблемма?

Код

// метод инициализации плеера
// ...
if(cache) {
    NSString *urlAddress = [Utils getPath:YES:number]; // локальный файл .mp3
    NSURL *urlStream = [NSURL fileURLWithPath:urlAddress];
    audioPlayer = [AVPlayer playerWithURL:urlStream];
    isInitOffline = YES;
} else {
    NSString *urlAddress = [Utils getAudioPath:episodeNum:episodeYear]; // http:// ссылка .mp3
    NSURL *urlStream = [NSURL URLWithString:urlAddress];
    audioPlayer = [AVPlayer playerWithURL:urlStream];
    isInitOffline = NO;
}
// ...

// play button listener
// ...
if([Utils isOnline] || bIsAudioCached) {
    [audioPlayer play];
    [self showPlay:NO];
    [self showPause:YES];
} else {
    [Popup makeNotOnlinePopup];
}
// ...


Заранее спасибо
Ответ:
Как не смешно, iPad вдруг решил играть звук, так и не понял почекму  :dash1 
Вопрос: IPhone 5 при выключенном состоянии и вставленном в него шнуре не работает

Такая проблема, разрядился полностью айфон, вставляю шнур, он никак не реагирует, что бы не нажимал, но в DFU режим переводится, попробовал перепрошить, он извлек ПО, потом на стадии выключения с DFU режима, он выключается и снова никак не работает, следовательно компьютер его не видит. Теперь он висит на шнурке. В чем может быть проблема?
Ответ: возможно в акб. несколько раз встречалось, что полностью разряжённый акб может показывать зарядку не сразу, а через некоторое время, иногда до нескольких часов...
Вопрос: Скопировать из видео библиотеки файл в папку докум

Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Ответ:
Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Вопрос: Выбор первого места работы(iOS)

1.Что лучше в начале карьеры, работать в небольшой, молодой фирме где пока еще нет очень опытных программистов, в основном небольшие проекты но зато более гибкий график, либо в крупной компании где серьёзные проекты и соответственно более опытные программисты, но и политики фирмы уже более жестка в плане графика работы например и т.д.?
2. Во всех компаниях джуниоров берут для обучения, так вот какого обучения можно ожидать вообще? Просто дадут задачу и потом проверят выполнение, или будет подсказывать и объяснять тратя свое время?
3.  Какой вариант лучше для начала, делать небольшой проект целиком, или работать в команде из нескольких программистов над более крупным проектом, в 1 случае будет конечно тяжелее но зато знания будут более обширные, а во втором будет легче так как самые сложные куски кода будет делать более опытные люди но и знания будут более узкими? 
Ответ:
Мне много раз приходилось на новые языки/среды перескакивать, поэтому для себя вот что вывел:

1. В большой фирме продержаться проще.  Человек, взявший тебя на работу, ожидает от тебя результатов (работник должон приносить прибыль!).  В маленькой фирме каждая твоя заминка на виду, в большой - "вработавшиеся" уже коллеги создают некий маховик, дающий тебе время на изучение технологии, языка или проекта.

2.  В большой фирме, точнее - в большом коллективе коллег, работающим с тобой на одном проекте, всегда можно к кому-нибудь обратиться с вопросом, если где-то конкретно встрял.  Если коллеги - не поголовно все уроды, то с тобой практически всегда поделятся и опытом, и знаниями.  К сожалению, не всё написано в мануалах...

3.  Чем меньше фирма, тем, как правило, больше мелких проектов.  Если ты тольно начинаешь врабатываться, переброска с проекта на проект сильно утомляет.

4.  Мелкая фирма черезчур сильно зависит от заказчика.  Минусов тут много - и обязательное исполнение любой, даже самой абсурдной прихоти заказчика, и возможность вылета с рабочего места из-за того, что заказчик решил тупо пару проектов свернуть или передать другой конторе.  В большой фирме такие фокусы по ряду причин отсутствуют.

Это всё - с точки зрения начинающего.  Если ты уже профи в том, над чем придётся работать, то абсолютно пофиг, где работать.

Минусы большой фирмы - любовь начальства к "правильной" одежде, постоянным собраниям и горы отчётности...

Добавлено через 13 минут и 13 секунд
Ах, да... что ещё, наверное, немаловажно, на больших фирмах принято время от времени отправлять своих сотрудников на всякие семинары, переобучения, сертификации.  На маленькой, как правило, всё вышеописанное - за свой счёт и в свободное от работы время...
Вопрос: Что должен знать Senior

Всем привет!

Название темы и суть вопроса, возможно, покажутся дурацкими, но тем не менее.
Задался недавно вопросом, что мне следует подтянуть, чтобы приблизиться к некоему абстрактному уровню Senior iOS developer.
Проанализировав свои знания и пробелы, выяснил, какие вещи, по своему мнению, я бы выделил как наиболее приоритетные.
Хотел бы спросить совета, насколько, на ваш взгляд, важны таки темы?

1) Освоение чистого SQLite.
Всегда работал только с CoreData и др. фреймворками.

2) Алгоритмы, алгоритмы, алгоритмы.
Кроме сортировки пузырьком - ничего сейчас из головы не напишу. Периодически решаю задачки с HackerRank, но сам вижу, что серьезные задачи с этого ресурса я пока не потяну.

3) Objective-C, Swift low level.
На стандартные вопросы об основах ObjC рантайма, работе ARC, структуре NSObject, особенностях Swift'а я ответить могу. Но как это все дело работает под капотом на низком уровне - с большим затруднением.
Есть мысль углубиться в исходники Objective-C, Swift и посвятить время их разбору.

4) UIDynamicAnimator.
Кроме пары домашних экспериментов, ни разу не работал. Из пары серий WWDC понял, что там непаханое поле для изучения, которое потянет за собой многое.

5) Сложные UICollectionViewLayout.
Кроме flow layout, всего один раз писал относительно несложный лайаут наследуясь от абстрактного класса UICollectionViewLayout.
Но встречаю много репозиториев на Github, где люди пишут просто космические лайауты, где глядя в код я понимаю, что до таких вещей еще я дорос, увы.

Буду рад комментариям!
Ответ: Лично я считаю, что специалист с рангом senior должен быть в первую очередь инженером высокого качества, а не iOS разработчиком.
Конечно, это реально большой багаж и съеденных собак, что влечет за собой умение хладнокровно смотреть на вещи и делать правильный выбор. Как по мне, большинство навыков часто не привязаны к оси. На моей практике встречается примерно 40% задач связанных с iOS. В основном же это умение правильно спроектировать архитектуру, правильно расставить приоритеты и сроки выполнения, наладить коммуникацию с заказчиком, умение вести проект, поставлять работающий продукт и так далее. Т.е. это человек, который сам может и знает как тащить всю телегу, пусть даже это и не нужно будет делать каждый день.

Умение владеть низкоуровненвыми штуками как раз и свидетельствует о количестве опыта, т.к. тривиальные и поверхностные задачки решаются легко, а вот что-то особенное влечет за собой копание вглубь.

Многие говорят, что алгоритмы не нужны, но это не так, они нужны но крайне редко (разве что вы работаете над какими-то специфическими задачами, где они нужны 24\7) и если вы ориентируетесь в них, то это ооочень спасает.
Обычно вы следуете такому порядку разработки: make it work, make it right, make it fast. И вот до последнего этапа вы почти никогда не доходите, т.к. большинство задач не требуют оптимизации. Но когда она нужна, вы начинаете рвать на себе волосы, потому что мало того, что вы не знаете подходящих решений, так вы даже не знаете как их правильно искать (гуглить) и даже если найдете что-то далеко похожее - как это правильно реализовать.
Вопрос: Как загрузить близлежащие места?

Вечер добрый. Помогите пожалуйста. Как получить близлежащие места к выбранной точке на карте используя сервисы Facebook Places API или Foursquare Venues API. По фейсбуку вообще инфы не нашел, по форсквейру нашел, но все сложное и непонятное. Я с ними вообще не работал никогда и вообще не понимаю что они возвращают. Мне нужно просто показать близлежащие места к точке заданной координатами latitute и longitude.
Ответ:
Сообщение от Slava-hacker32
Я с ними вообще не работал никогда и вообще не понимаю что они возвращают
И не работайте. Наймите кого-нибудь.
Вопрос: Как вывести запись на стене ВК

Добрый день. Уже умаялся с одной проблемой. Делаю вывод стенки юзера в ВК, уже со многим разобрался и вложения разные и проигрывание аудио, видео и все такое, но с репостами возникли трудности, а именно как их вывести/показать. Хочу сделать что бы первая ячейка (indexPath.row==0) была инфа о самом юзере (тут проблем нет все работает), проблемы дальше, во второй ячейке должен быть текст юзера (если он есть этот текст) если текста нету, то должна быть на этом месте ячейка с инфой откуда юзер этот пост притащил. Если текст есть, то ячейка с инфой о репосте должна быть в indexPath.row==2, потом помимо текста могут быть вложения от юзера, напр картинка, ее тоже до репоста нужно показать (например с 3 по 5) и уже после показа вложений вставлять ячейку с инфой о репосте, правда под каким индексом она будет хз. Потом аналогичная проблема и с внутренним текстом (ну в посте который зарепостили) он может быть, а может не быть. И вот как все это закодить я не представляю, с этими индексами запутался вкрай, даже идей никаких не приходит, разве что все жестко закодить (прописать в ifах все возможные варианты). Делаю для одного варианта все работает, чуть другой тип поста, приложение крашится, если неправильно ифы проставлю то во всех ячейках выполняется только первое условие (напр. проверка есть ли текст от юзера). Может кто подскажет как тут поступить или пример какой то, именно этого места. (делаю без vk sdk на чистом vk api +afNetworking)
Ответ: Вообщем я полукостыльным способом этот вывод сделал

Код 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    VRUniversalTypePost* AllPost = [self.allPostsArray objectAtIndex:indexPath.section];
    startingIndexPath = [self tableCellOffset:AllPost];
    
 
   
   
    
    
    
    if (indexPath.row==0) {
        
        indexCellNumb=0;
        static NSString *CellIdentifier = @"UserCell";
        VRUserCell *cell = [self.tableViewForWallPost dequeueReusableCellWithIdentifier:CellIdentifier];
        
        if (!cell) {
            cell = [[VRUserCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        
        VRUser * userPost = AllPost.fromUser;
        NSLog(@"AllPost.fromUser.lastName = %@", AllPost.fromUser.lastName );
        
        NSString *authorPostID = [NSString stringWithFormat:@"%@ %@", userPost.firstName, userPost.lastName];
        // NSString *srt = [self getPostAuthorFromID: authorPostID];
       
        cell.userNameLabel.text = authorPostID;
        cell.userPhotoImgView.layer.cornerRadius = 25;
        cell.userPhotoImgView.layer.masksToBounds = YES;
        [cell.userPhotoImgView setImageWithURL:userPost.imageURL placeholderImage:[UIImage imageNamed:@"administrator-50.png"]];
        cell.pubDatePostLabel.text = AllPost.postPubDate;
        
        
 
      
        
        return cell;
    }
    
    else  {
        
        
        if (((AllPost.text!=nil)&&(![AllPost.text isEqualToString:@""]))&&(indexPath.row==1)) {
           
                
            
                static NSString *CellIdentifier = @"typePostIsText";
                VRPostCell *cell = [self.tableViewForWallPost dequeueReusableCellWithIdentifier:CellIdentifier];
                
                if (!cell) {
                    cell = [[VRPostCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
                }
                
                cell.postTextLabel.text = AllPost.text;
            
            indexCellNumb++;
                return cell;
            
        }
        
        else  if ((AllPost.attachments!=nil)&&(indexCellNumb<=AllPost.attachments.count)){
            NSLog(@"indexPath.row = %i", indexPath.row);
            NSLog(@"indexCellNumb = %i", indexCellNumb);
            NSInteger countForOffsetTable;
            
            if ((AllPost.text!=nil)&&(![AllPost.text isEqualToString:@""])) {
                countForOffsetTable=1;
            }
            else {
                countForOffsetTable=0;
            }
            
            
                NSArray * attachArray = AllPost.attachments;
                 NSDictionary * attachmentsDict;
              //  for (int i=0; i<attachArray.count; i++) {
                
               
                NSLog(@"attachArray.count = %i", attachArray.count);
            NSLog(@"indexPath.row error = %i", (indexPath.row-(countForOffsetTable+1)) );
           
                
            
                attachmentsDict = attachArray[indexPath.row-(countForOffsetTable+1)];
                indexCellNumb++;
                return [self attachmentViewFromPost:AllPost andAttachmentDict:attachmentsDict];
            
           
                //}
        }
        
        else if ((AllPost.postCopy==YES)&&(indexPath.row==indexCellNumb+1)) {
            
            static NSString *CellIdentifier = @"postCopy";
            VRPostCopyCell *cell = [self.tableViewForWallPost dequeueReusableCellWithIdentifier:CellIdentifier];
            
            if (!cell) {
                cell = [[VRPostCopyCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
            
            
            NSString *strID = [NSString stringWithFormat:@"%i", AllPost.postFromUserID];
            cell.postFrom.text = AllPost.fromGroup.groupName;
            
            return cell;
            
        }
        
        else if ((AllPost.postCopy==YES)&&
                 (AllPost.postInside.text!=nil)&&
                 (![AllPost.postInside.text isEqualToString:@""])&&
                 (indexPath.row==indexCellNumb+2)) {
            
            static NSString *CellIdentifier = @"typePostIsText";
            VRPostCell *cell = [self.tableViewForWallPost dequeueReusableCellWithIdentifier:CellIdentifier];
            
            if (!cell) {
                cell = [[VRPostCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
            
            cell.postTextLabel.text = AllPost.postInside.text;
            
            return cell;
            
        }
        
        else  if (((AllPost.postCopy==YES))&&(AllPost.postInside.attachments!=nil)){
            
NSInteger strInt = (AllPost.cellForTypeIndex+ AllPost.attachments.count) + AllPost.postInside.cellForTypeIndex;
            
            NSArray * attachArray = AllPost.postInside.attachments;
            
            
            
            NSDictionary * attachmentsDict;
            
            
            NSLog(@"indexPath.row = %i", indexPath.row );
            attachmentsDict = attachArray[indexPath.row-(strInt+1)];
            
            return [self attachmentViewFromPost:AllPost andAttachmentDict:attachmentsDict];
            
            
        }
 
        
        
        
    }
    
    
    
 
 
    return nil;
 
}
При скроле вниз все отображается и работает нормально, но при скролле вверх приложение начинает падать. Проблема в этой переменной indexCellNumb, которая только увеличивается, но при скроле вверх она остается такой же (напр 7) в результате идет обращение к массиву с двумя элементами к объекту под интексом 7. И как результат все приложение падает.
Подскажите как определить что идет скролл вверх, что можно было значение indexCellNumb уменьшать? Если делать без этой переменной, то при выполнении метода cellForRowAtIndexPath будет выполняться только одно условие, например 10 раз выведется один и тот же текст, так как выполнится условие что AllPost.text!=nil (о том что переменные названы ужасно неправильно я понимаю)

Добавлено через 2 часа 58 минут
Или может кто то может подсказать как построить логику без этой переменной indexCellNumb?
Вопрос: Работа в среде xcode 6

Изучаю программирование в этой среде малыми шагами - возник ряд вопросов...
Я пытаюсь написать простенькую графическую игру.
1. Есть ли в xcode 6 возможность работать с векторной графикой а не с растровой встроенными средствами без сторонних библиотек? А то масштабирование на разные экраны сильно портит вид анимации...
2. При отладке иногда вываливается ассемблерный код приложения. Зачем вообще нужен ассемблер ? при таком высокоуровневом программировании?
3. Как реально работать с вещами типа Profile -> Activity monitor -> Automation -> Energy diagnostic. Без поллитра не разберешь... что код запускаю что эти расширения ничего не происходит.
4. И вот глюк который я не понимаю уже неделю... В своем приложении в редакторе интерфейса (view controller)
завел два ImageView с именами ImageView и ImageViewR ... задал им графические картинки. В .m файле приложения вижу поля
соответствующие этим кантролам... @synthesize ImageView; @synthesize ImageViewR;..
Завел таймер для создания анимации но в обработке тика таймера OnTimer {}...Вижу что ImageView сушествующий объект
а ImageViewR всегда nill. В этом и вопрос почему nill? Оба объекта одинаковой видимости но один есть а другого нет. При этом на форме они видны оба...
Ответ:
Сообщение от Митя800
Документацию Apple хоть раз открывали? Там все в картинках доходчиво описано.
Есть книги по xcode. Документацию онлайн ? Она не работает на виртуальной машине... или файл какой скачать ?

Добавлено через 2 минуты
Сообщение от Митя800
Привязку IBOutlet делали?
А что надо обязательно каждый кантрол привязывать ? (в данном случае ImageView )... На самом деле когда я кликнул на
привязку как раз этот эффект пропал...

Добавлено через 13 минут
И еще я совсем не понял размеры окна эмулятора. Задаю свойство проекта - портрет или ландшафт а оно остается квадратным...
Помещаю в левый угол кантрол а он остается в правом... У меня единственный файл main.storyboard но в эмуляторе кантролы располагаются не так как о окне дизайна!

Добавлено через 4 часа 13 минут
Стал читать про SpriteKit движок. Встроенный я так понял в xcode 7. Срочно перехожу на него!
Вопрос: Голосовой набор в клавиатуре

Добрый день! Подскажите, пожалуйста, по поводу голосового набора в стандартной клавиатуре.

В стандартной клавиатуре, есть иконка микрофона - при нажатии на нее запускается запись голоса в текст.

Чтобы применить эту опцию в своем приложении, необходимо ли использовать какие то голосовые библиотеки? или необходимо просто выбрать нужный тип клавиатуры - и как я понимаю это работает только под 8 IOS?

Спасибо!
Ответ: Ничего не нужно, работает из коробки - просто потому, что на девайсе ты сказал использовать голосовой ввод.
Но к сожалению только на девайсе, на симуляторе не работает.