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

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
#1

Создать метод - Objective-C

14.11.2012, 02:21. Просмотров 1188. Ответов 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];
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2012, 02:21     Создать метод
Посмотрите здесь:

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

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

Не удается создать метод - C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Как создать метод? - Java SE
Подскажите пожалуйста как создать общий метод для считывания, который час сижу, мне ошибки кидает FileInputStream infile=new...

Не получается создать универсальный метод - C#
Создать интерфейс IOperations, классы Vector2D и Vector3D, которые реализуют этот интерфейс, в которых реализованы методы сложения,...

Создать метод рисования линии - C#
Мне нужно создать метод в классе Paint, который строит линию по заданным координатам на форме или на pictureBox1 - не принципиально. ...

.NET 4.x Как создать свой метод - C#
Добрый день! Вобщем в чём собственно дело. В программе много раз используется один и тот же цикл и ещё некоторые операции. Как мне...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
14.11.2012, 02:22     Создать метод #2
вынести в отдельный метод
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 являются статическими для всего приложения?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2012, 09:51     Создать метод #3

Password в NSUserDefaults?
Используйте KeyChain.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
14.11.2012, 10:15  [ТС]     Создать метод #4
Цитата Сообщение от 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, и метод регистрации? У меня почему-то пишет, что не объявлено ни метода, ни могу использовать эти аутлеты. Файлы лежат в разных папках, но в одном проекте, не могу понять почему такая несуразица возникает
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2012, 15:21     Создать метод #5
Цитата Сообщение от 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, и метод регистрации? У меня почему-то пишет, что не объявлено ни метода, ни могу использовать эти аутлеты. Файлы лежат в разных папках, но в одном проекте, не могу понять почему такая несуразица возникает
Если честно, не понял в чем проблема.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
14.11.2012, 16:03  [ТС]     Создать метод #6
Спасибо за ответ, мне легче получать ответы справшивая, а не читая =) Вы уж извините =)
Цитата Сообщение от zulkis Посмотреть сообщение
Данный метод ничего не создает. Он получает доступ к дефолтному файлу типа .plist настроек приложения(Он кстати расположен в Вашем приложении -> Library -> Preferences -> <YourBundleID>.plist). А затем вызывает другой метод передав туда этот NSUserDefaults.
Все. Ничего он не создает.
Я понял, т.е вызывая метод
Objective-C
1
-(IBAction) registerNewUser
, и создавая там новый NSUserDefaults, мне не важно, что он исчезнет после выполнения метода, т.к объявление локальное, но заносятся значения в файл, который сохраняет данные параметры на время существования программы, верно?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2012, 18:46     Создать метод #7
Цитата Сообщение от Fooly Посмотреть сообщение
, и создавая там новый NSUserDefault
Да чтож такое то...

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

Цитата Сообщение от Fooly Посмотреть сообщение
файл, который сохраняет
Файл ничего никогда НЕ сохраняет.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
14.11.2012, 23:19     Создать метод #8
Цитата Сообщение от zulkis Посмотреть сообщение
недопонял про то, что данный класс NSUserDefaults является статическим
не класс статический, а юзердефолтс статические для всего приложения, просто есть и все, их не нужно создавать, к ним нужно обращаться и записывать в них
ладно, zulkis тут уже достаточно написал о "не создает" и "просто есть" ))
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.11.2012, 06:12     Создать метод #9
Цитата Сообщение от Vorona Посмотреть сообщение
Сообщение от zulkis
недопонял про то, что данный класс NSUserDefaults является статическим
Но-но-но, это не моя цитата, попрошу...
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
15.11.2012, 09:59  [ТС]     Создать метод #10
Цитата Сообщение от 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, пишет, что не объявлены данные переменные. Где я затупил? Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 00:32     Создать метод
Еще ссылки по теме:

Создать параметризованный метод Sort - C#
Необходимо создать параметризованный метод Sort с параметром – типом данных. Реализовать в нем сортировку методом выбора (алгоритм ее...

Создать метод получения массива - Java SE
Привет,у меня есть два класса(Flat и DwellingFloor),причём второй основывается на массиве класса Flat,вот как сейчас всё выглядит: class...

''Комплексные числа'' создать метод - Delphi
12. Комплексное число Методы: вывод на экран (текстовый и графический), сложение, вычитание, умножение, деление. Нужно создать...

Как создать метод в классе? - Java SE
здраствуйте! создал класс но не могу создать метод поможете? public class Stud { private String name; private String...

Создать программу, реализующей метод касательных - Matlab
Создать программу на внутреннем языке среды МatLAB , реализующей метод , заданный по варианту ; провести тестирование созданной программы...


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

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
16.11.2012, 00:32     Создать метод #11

Не по теме:

Цитата Сообщение от 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];
}
Yandex
Объявления
16.11.2012, 00:32     Создать метод
Ответ Создать тему
Опции темы

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