Форум программистов, компьютерный форум, киберфорум
Objective-C
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147

Создать метод

14.11.2012, 02:21. Показов 1971. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Под ночь не варит котелок уже, но мне всё интересно как реализовать 1 метод =) Есть файлик с настройками Settings.bundle В нём есть 2 текстовых поля, для которых заданы ключи "username" "password". Есть 2 филда для ввода логина и пароля "usernameField" "passwordField".
Есть кнопка для регистрации и для неё я хочу написать метод, который будет записывать логин и пасс из филдов в настройки для дальнейшего сравнения введённых данных при логине. Суть вопроса в том, что я не могу понять каким образом объявить метод, чтобы при последующем создании любого NSUserDefaults в мэйне я смог для него использовать данный метод. Я что-то недопонимаю, и получается только с созданием локальной памяти в самом методе =(
Objective-C
1
2
3
4
5
6
7
-(IBAction)registerNewUser; //регистрируем нового юзера
{
    NSUserDefaults *userData=[NSUserDefaults standardUserDefaults];
    [userData setObject:usernameField.text forKey:@"username"];
    [userData setObject:passwordField.text forKey:@"password"];
    [userData synchronize];
}
Данный метод соединен с кнопкой регистрации. Каким образом передать в этот метод можно абсолютно любой NSUserDefaults?

Добавлено через 13 минут
Можно как-то таким макаром метод сделать либо, чтобы метод возвращал базу, но как тогда сюда впендюрить, созданную базу в мэйне?
Objective-C
1
2
3
4
5
6
7
-(void)registerNewUser:(NSUserDefaults*)dataBase
{
    
    [dataBase setObject:usernameField.text forKey:@"username"];
    [dataBase setObject:passwordField.text forKey:@"password"];
    [dataBase synchronize];
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2012, 02:21
Ответы с готовыми решениями:

Требуется создать метод и там сложить 2 NSNumber
Требуется создать метод и там сложить 2 NSNumber кто-нибудь подскажите как это сделать

Создать метод, принимающий номер дня и возвращающий его название
В классе «Robot»создать метод «weekDay» который принимает аргумент (номер дня) и возвращает его название. Нумерация дней недели...

Создать класс ОдномерныйМассив. Создать метод для вычисления суммы элементов двух массивов. Метод должен иметь два аргум
Создать класс ОдномерныйМассив. Создать метод для вычисления суммы элементов двух массивов. Метод должен иметь два аргумента - одномерные...

10
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
14.11.2012, 02:22
вынести в отдельный метод
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
- (IBAction)registerNewUser;
{
    NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
    [self synchronizeUserData:userData];
}
 
- (void)synchronizeUserData:(NSUserDefaults *)userData
{
    [userData setObject:usernameField.text forKey:@"username"];
    [userData setObject:passwordField.text forKey:@"password"];
    [userData synchronize];
}
но смысл этого, если NSUserDefaults являются статическими для всего приложения?
1
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
14.11.2012, 09:51

Password в NSUserDefaults?
Используйте KeyChain.
1
 Аватар для Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
14.11.2012, 10:15  [ТС]
Цитата Сообщение от Vorona Посмотреть сообщение
вынести в отдельный метод
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
- (IBAction)registerNewUser;
{
    NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
    [self synchronizeUserData:userData];
}
 
- (void)synchronizeUserData:(NSUserDefaults *)userData
{
    [userData setObject:usernameField.text forKey:@"username"];
    [userData setObject:passwordField.text forKey:@"password"];
    [userData synchronize];
}
но смысл этого, если NSUserDefaults являются статическими для всего приложения?
Наверное, Вы не так меня поняли. Вы переписали, то что написал я, только в 2 метода, и при этом первый метод registerNewUser по-прежнему создаёт хранилище для данных. А я хочу, чтобы он не создавал хранилище, а записывал в существующее, которое создаётся не в @implemеntation, а в моём main.m Или так не получится? А также я наверное в документации эппл профукал и недопонял про то, что данный класс NSUserDefaults является статическим, т.е его можно создать в любом методе новое хранилище и оно не будет локальным?

Добавлено через 22 минуты
Цитата Сообщение от zulkis Посмотреть сообщение

Password в NSUserDefaults?
Используйте KeyChain.
Мне надо разобраться с NSUserDefaults Потом разбираться буду с другими возможностями

И ещё хочу от одного нубского вопроса избавиться, который меня мучает
Есть main.m файл, а также некие newClass.h newClass.m. Переменные в хедере являются приватными ведь, т.е к ним доступ можно получить только через сет- и гет-методы? (так вроде и в с++, но вроде читал, что они публичны). Методы, объявленные в @implementation являются приватными? Т.е доступ извне будет только к тем методам, которые объявлены в хедере? И можно ведь не объявлять переменные, а сразу создавать свойства? (Вроде как работает всё при этом)(единственное сейчас не вспомню, нужны ли фигурные скобочки пустые) Вот пример (сейчас на работе не на чем компилить код, возможно допустил ошибки):
Objective-C
1
2
3
4
5
6
7
8
9
10
#import <UIKit/UIKit.h>
 
@interface newClass : NSObject
 
@property (nonatomic,retain) IBOutlet UIButton *registerButton;
@property (nonatomic,retain) IBOutlet UITextField *userName;
 
-(IBAction) registerNewUser;
 
@end
newClass.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
#import "newClass.h"
 
@implementation newClass
 
@synthesize registerButton, userName;
 
-(IBAction) registerNewUser
{//объявление метода
}
//и ещё кучка методов
@end
В результате в main.m с подключенным
Objective-C
1
#import "newClass.h"
я могу использовать registerButton, username, и метод регистрации? У меня почему-то пишет, что не объявлено ни метода, ни могу использовать эти аутлеты. Файлы лежат в разных папках, но в одном проекте, не могу понять почему такая несуразица возникает
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
14.11.2012, 15:21
Цитата Сообщение от Fooly Посмотреть сообщение
недопонял про то, что данный класс NSUserDefaults является статическим
С какого перепуга он статический? Класс то...

Цитата Сообщение от Vorona Посмотреть сообщение
- (IBAction)registerNewUser;
Данный метод ничего не создает. Он получает доступ к дефолтному файлу типа .plist настроек приложения(Он кстати расположен в Вашем приложении -> Library -> Preferences -> <YourBundleID>.plist). А затем вызывает другой метод передав туда этот NSUserDefaults.
Все. Ничего он не создает.

Далее:
Цитата Сообщение от Fooly Посмотреть сообщение
Мне надо разобраться с NSUserDefaults
А я не про то, с чем Вам нужно разбираться, я про то, что это в корне неверно.
Во-первых по причине необходимости скрытия данных(пароля).
Во-вторых по причине того, что .plist файлы, как и ассоциативные массивы(NSDictionary в Cocoa), являются хранилищем типа key-value, соответственно вы будете перетирать каждый раз данные о usename и password, если по этим ключам записывать разные данные.

Следующее:

Цитата Сообщение от Fooly Посмотреть сообщение
newClass.h newClass.m
Я уже не раз Вам гвоорил - прочтите хотябы 1 книгу. С интересом желательно. Избавитесь от кучи таких вопросов.

Цитата Сообщение от Fooly Посмотреть сообщение
Переменные в хедере являются приватными ведь
ivar - переменные ("переменные в хедере" - если я верно понял) - по умолчанию в интерфейсе protected.
Доступ можно получить очень многими способами в ObjC.
Не сравнивайте c++ и ObjC "на коленке" - читайте литературу.

Цитата Сообщение от Fooly Посмотреть сообщение
Т.е доступ извне будет только к тем методам, которые объявлены в хедере?
Нет, это всего лишь "область видимости". В ObjC нет понятия метод, но есть сообщение. Сообщение может быть послано кому угодно и неважно, знает ли тот, кто посылает сообщение о том, может ли принимаемый его принять.


Цитата Сообщение от Fooly Посмотреть сообщение
И можно ведь не объявлять переменные, а сразу создавать свойства? (Вроде как работает всё при этом)(единственное сейчас не вспомню, нужны ли фигурные скобочки пустые) Вот пример (сейчас на работе не на чем компилить код, возможно допустил ошибки):
Не сравнивайте ivar(переменные экземпляра объекта) с property(свойствами). Это разные вещи. Читайте литературу.
property в objc автоматически генерируют методы доступа (setters, getters) для ivar.



Цитата Сообщение от Fooly Посмотреть сообщение
я могу использовать registerButton, username, и метод регистрации? У меня почему-то пишет, что не объявлено ни метода, ни могу использовать эти аутлеты. Файлы лежат в разных папках, но в одном проекте, не могу понять почему такая несуразица возникает
Если честно, не понял в чем проблема.
1
 Аватар для Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
14.11.2012, 16:03  [ТС]
Спасибо за ответ, мне легче получать ответы справшивая, а не читая =) Вы уж извините =)
Цитата Сообщение от zulkis Посмотреть сообщение
Данный метод ничего не создает. Он получает доступ к дефолтному файлу типа .plist настроек приложения(Он кстати расположен в Вашем приложении -> Library -> Preferences -> <YourBundleID>.plist). А затем вызывает другой метод передав туда этот NSUserDefaults.
Все. Ничего он не создает.
Я понял, т.е вызывая метод
Objective-C
1
-(IBAction) registerNewUser
, и создавая там новый NSUserDefaults, мне не важно, что он исчезнет после выполнения метода, т.к объявление локальное, но заносятся значения в файл, который сохраняет данные параметры на время существования программы, верно?
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
14.11.2012, 18:46
Цитата Сообщение от Fooly Посмотреть сообщение
, и создавая там новый NSUserDefault
Да чтож такое то...

Цитата Сообщение от zulkis Посмотреть сообщение
Данный метод ничего не создает
Еще раз: Данный метод НИЧЕГО не создает.
И в нем ничего не создается.
Это всего лишь указатель на существующий NSUserDefaults. Стандартный, он есть всегда. На уровне приложения.

Цитата Сообщение от Fooly Посмотреть сообщение
файл, который сохраняет
Файл ничего никогда НЕ сохраняет.
1
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
14.11.2012, 23:19
Цитата Сообщение от zulkis Посмотреть сообщение
недопонял про то, что данный класс NSUserDefaults является статическим
не класс статический, а юзердефолтс статические для всего приложения, просто есть и все, их не нужно создавать, к ним нужно обращаться и записывать в них
ладно, zulkis тут уже достаточно написал о "не создает" и "просто есть" ))
1
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
15.11.2012, 06:12
Цитата Сообщение от Vorona Посмотреть сообщение
Сообщение от zulkis
недопонял про то, что данный класс NSUserDefaults является статическим
Но-но-но, это не моя цитата, попрошу...
1
 Аватар для Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
15.11.2012, 09:59  [ТС]
Цитата Сообщение от Vorona Посмотреть сообщение
не класс статический, а юзердефолтс статические для всего приложения, просто есть и все, их не нужно создавать, к ним нужно обращаться и записывать в них
ладно, zulkis тут уже достаточно написал о "не создает" и "просто есть" ))
Спасибо, я всё понял, и всё работает как надо =) Я немного не так выражаюсь иногда, когда пишу, и получается путаница как с классом, хотя я сразу понял про NSUserDefaults
Ещё раз спасибо zulkis и Vorona
Я понял, что нужно побольше читать, и я найду ответы на свои вопросы, но мне легче получить ответ здесь и сейчас, вместо того чтобы вопрос мучал меня и не давал сосредоточиться на другом Поэтому задам ещё раз вопрос, который был недопонят выше. Наверное он нубский, ну и ладно...
Допустим есть файлик newClass.h, в котором определено:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
#import <UIKit/UIKit.h>
@interface newClass : //(наследуемся тут)
{
UIButton *myButton;
IBOUtlet UILabel * myLabel;
}
 
@property (nonatomic,retain) UIButton *myButton;
@property (nonatomic,retain) IBOUtlet UILabel * myLabel;
 
@end
Далее подключаем newClass.h и через
Objective-C
1
@synthesize myButton,myLabel;
синтезируем свойства в @implementation

Есть файлик main.m, в который я подключаю newClass.h, но при этом в теле функции
Objective-C
1
2
3
int main(int argc, char *argv[])
{//объявление @autoreleasepool
}
При попытке задействовать myButton и myLabel, пишет, что не объявлены данные переменные. Где я затупил? Спасибо
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
16.11.2012, 00:32

Не по теме:

Цитата Сообщение от zulkis Посмотреть сообщение
Но-но-но, это не моя цитата, попрошу...
ни в коем случае :-[



рабирайтесь с ООП, чтобы получить доступ к свойствам класса, нужно создать объект, которому они принадлежат либо они должны быть статическими

Objective-C
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    newClass *obj = [[newClass alloc] init];
    
    [obj.myButton doSomething];
    [obj.myLabel doSomething];
 
    [obj release];
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2012, 00:32
Помогаю со студенческими работами здесь

Создать метод аналитических иерархий и метод перестановок
создать метод аналитических иерархий и метод перестановок с добавлениями критериев и альтернатив по проектированию локальной вычислительной...

Подскажите, нужно перегрузить оператор или создать метод(если создать то не понимаю как) записи в файл
вот как я хотел сделать запись в файл перегрузкой #pragma once #include &quot;iostream&quot; #include &quot;conio.h&quot; #include...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Создать метод
Всем привет, такое задание, есть список (List&lt;SelectedUser&gt;) и необходимо создать метод который будет перебирать этот массив и преобразует...

Создать метод
Вообще не шарю c# , если кто может объяснить как методом делать


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru