2016-03-04 3 views
0

Язык: Objective-C, Я новичок в разработке iOS, поэтому, пожалуйста, помогите мне самым простым способом, если вы можете, я сохраняю данные в словаре, затем NSUserDefaults после этого хочу получить данные от них NSUserDefaults, I «Работает, когда пользователь нажимает на texfield, тогда текст должен быть сохранен в словаре, но когда я проверю Xcode после установки слова для точек останова, вы увидите nil. Я отправляю скриншоты и код, пожалуйста, помогите мне. БлагодаряКак отображать данные в NSMutableDictionary?

initialization of dictionary in viewDidLoad

save to NSUserDefaults

-(void)textFieldDidEndEditing:(UITextField *)textField { 
    //we'll use the following method if the TF is out of the table means not in a cell. 

    if([textField isEqual:self.getNameLabel]){ 
     [nameDateDict setObject:[textField text] forKey:K_NAME]; 
     [self saveToNSUserDefaults]; 
    } 
} 

Xcode-выход

nameDateDict NSMutableDictionary * nil 0x0000000000000000 

К сожалению название texfield является getNameLabel, я буду править позже поэтому, пожалуйста, не путайте после чтение имени. Даже то, что я уже проверил этот код работает

[timeDict setObject:@"Hello" forKey:@"Greetings"]; 
    [timeDict setObject:@"Bye" forKey:@"B_Key"]; 
    [timeDict setObject:@"what?" forKey:@"W_Key"]; 

    [[NSUserDefaults standardUserDefaults] setObject:timeDict forKey:@"Greetings"]; 
    [[NSUserDefaults standardUserDefaults] setObject:timeDict forKey:@"B_Key"]; 
    [[NSUserDefaults standardUserDefaults] setObject:timeDict forKey:@"W_Key"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 


    timeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"Greetings"]; 
    timeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"B_Key"]; 
    timeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"W_Key"]; 
+0

Ваш код не имеет никакого смысла. Вы не заполняете учебник, но заменяете его снова и снова. Я настоятельно рекомендую начать с руководства для новичков по программированию. – Eiko

+0

, то можете ли вы предложить мне, как заполнить словарь данными? – Error3735

+0

Весь ваш код показывает полное непонимание словарей и их работу. Читайте о них, ваш код просто не имеет смысла. – Eiko

ответ

0
- (BOOL)textFieldShouldReturn:(UITextField*)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
    } 
    -(void) textFieldDidEndEditing:(UITextField *)textField { 
    [self saveToNSUserDefaults:@{@"keyName":textField.text}]; 
    } 
    -(void)saveToNSUserDefaults:(NSDictionary *)dict{ 
    [[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"myDictionary"]; 
    } 
    -(void *)retrieveFromNSUserDefaults{ 
     NSDictionary *tempDict=[[NSDictionary alloc] initWithDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"myDictionary"]]; 
     NSlog(@"TextField Value: %@",[tempDict objectForKey:@"keyName"]); 
    } 

, как вы сохраняете словарь не было правильным. Пожалуйста, перейдите по ссылке https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/index.html, чтобы узнать больше о том, как их использовать.
Все пришли с новичка, но старайтесь не пропускать основы.

+0

Да, я заметил, что делаю ошибку, я решил ее хорошо благодаря большому количеству :) В основном я забыл добавить name (string value) Я добавлял словаря снова и снова. – Error3735

+0

Да, бывает. Не волнуйся, продолжай. –

+0

спасибо, что я опубликовал другой код там, где я работал, и это дало мне правильный ответ, поэтому я волновался – Error3735

0

Как на ваших скриншотах вы хранения словарных значений в неправильном направлении, вы сохраняете каждый раз, когда весь словарь для каждого NSUserDefaults ключа. Это schoul быть такими:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:@"value" forKey:@"key"]; 
[[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"key"] forKey:@"key"]; 


Чтобы вернуть значение из NSUserDefaults словарю:

[dict setObject:[[NSUserDefaults standardUserDefaults] objectForKey:@"key"] forKey:@"key"]; 
+0

Да, я заметил, что делал ошибку, я решил это хорошо, спасибо большое :) – Error3735

1

Несколько вещей здесь. Во-первых, у вас проблема с областью, поскольку вы создаете локальный объект-словарь в viewDidLoad, к которому вы не можете получить доступ позже. Похоже, вы захотите иметь свойство NSMutableDictionary, доступное для класса, которое должно быть указано либо в файле заголовка, либо в расширении интерфейса в файле реализации (в зависимости от использования этого словаря в вашем проекте):

@property (nonatomic, strong) NSMutableDictionary *nameDateDictionary; 

Во-вторых, вы неправильно инициализируете или получаете доступ к вашему словарю и его объектам. Итак, (используя некоторые литературные ярлыки синтаксиса) методы viewDidLoad и saveToNSUserDefaults:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *name = [defaults objectForKey:K_NAME]; 
    NSDate *startDate = [defaults objectForKey:K_START_DATE]; 
    NSDate *endDate = [defaults objectForKey:K_END_DATE]; 

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:@{K_NAME: name, 
                        K_START_DATE: startDate, 
                        K_END_DATE: endDate}]; 
    self.nameDateDictionary = dict;   
} 

- (void)saveToNSUserDefaults 
{ 
    NSMutableDictionary *dict = self.nameDateDictionary; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:dict[K_NAME] forKey:K_NAME]; 
    [defaults setObject:dict[K_START_DATE] forKey:K_START_DATE]; 
    [defaults setObject:dict[K_END_DATE] forKey:K_END_DATE]; 

    [defaults synchronize]; 
}