Как сохранить NSMutableArray в NSUserDefaults и показать результаты в TableView? - PullRequest
0 голосов
/ 11 января 2012

Я хочу сохранить уведомления, поступающие с сервера, в моем приложении, а также создать пользовательский интерфейс, чтобы пользователи могли выбирать, какое уведомление (сообщение) читать.В запланированном методе мой клиент контролирует изменения внутри сервера, и связь осуществляется в формате JSON.Я разобрал его и вижу результаты в NSLog(@"....",..) тоже.Я также контролирую статус сообщения с сервера, если статус равен 1, я сохраню сообщение и добавлю узел в TableView. Теперь, кто-нибудь может мне помочь с тем, как передавать данные в NSMutableArray оба в NSUserDefaultsа TableView?Я также могу поделиться кодом или JSON-представлением, если вы хотите .. Было бы лучше, если бы вы могли объяснить с помощью некоторого кода.тоже написал по коду, хочу отобразить NSMutableArray в UITableView

    `-(IBAction)Accept:(id)sender
    {   userName=[[NSString alloc] initWithString:userNameField.text ];
        [userNameField setText:userName];
        NSUserDefaults *userNameDef= [NSUserDefaults standardUserDefaults];
        [userNameDef setObject:userName forKey:@"userNameKey"];
        password =[[NSString alloc] initWithString:passwordField.text];
        [passwordField setText:password];
        NSUserDefaults *passDef=[NSUserDefaults standardUserDefaults];
        [passDef setObject:password forKey:@"passwordKey"];
        serverIP=[[NSString alloc] initWithString: serverField.text];
        [serverField setText:serverIP];
        NSUserDefaults *serverDef=[NSUserDefaults standardUserDefaults];
        [serverDef setObject:serverIP forKey:@"serverIPKey"];
        [userNameDef synchronize];
        [serverDef synchronize];
        [passDef synchronize];


    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"BNTPRO "
                                                      message:@"Your User Informations are going to be sent to server. Do you accept?"
                                                     delegate:self
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:@"Cancel",  nil];
    [message show];
}



    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

        if([title isEqualToString:@"OK"])
        {
            if([userNameField.text isEqualToString:@""]|| [passwordField.text isEqualToString:@""] || [serverField.text length]<10) 
            {
                UIAlertView *message1 = [[UIAlertView alloc] initWithTitle:@"BNTPRO "
                                                                   message:@"Your User Informations are not defined properly!"
                                                                  delegate:nil
                                                         cancelButtonTitle:@"OK"
                                                         otherButtonTitles:  nil];

                [message1 show];


        [userNameField  resignFirstResponder];
            [passwordField resignFirstResponder];
            return;
        }
        //## GET code to here**
        NSString *str1=[@"?username=" stringByAppendingString:userNameField.text];
        NSString *str2=[@"&password=" stringByAppendingString:passwordField.text];
        NSString *str3=[str1 stringByAppendingString:str2];
        NSString *str4 =[@"http://" stringByAppendingString:serverField.text];


        NSURL *url=[NSURL URLWithString:[str4 stringByAppendingString:[@"/ipad/login.php" stringByAppendingString:str3]]];
        NSLog(@"%@\n",url);
        //get the url to jsondata
        NSData *jSonData=[NSData dataWithContentsOfURL:url];

        if (jSonData!=nil) {
            NSError *error=nil;
            id result=[NSJSONSerialization JSONObjectWithData:jSonData options:
                       NSJSONReadingMutableContainers error:&error];
            if (error==nil) {
                NSDictionary *mess=[result objectForKey:@"message"];
                NSDictionary *messContent=[mess valueForKeyPath:@"message"];
                NSDictionary *messDate=[mess valueForKeyPath:@"date"];
                NSDictionary *messID=[mess valueForKeyPath:@"ID"];
                NSDictionary    *messStatus=[mess valueForKey:@"status"];

                NSLog(@"%@ *** Message %@ \n Message Content: %@ \n Mesage ID: %@ \n Message Date: %@\n \nilhancetin MessageSatus: %@", result, mess, messContent, messID,messDate,messStatus);
                NSString*key1=[ result objectForKey:@"key" ];

                NSString *s1=[@"http://" stringByAppendingString:serverField.text];
                NSString *s2=[s1 stringByAppendingString:@"/ipad/button.php"];
                NSURL *url2=[NSURL URLWithString:[s2 stringByAppendingString:[@"?key=" stringByAppendingString:key1]]];
                NSLog(@"\n%@\n",url2 );
                NSData *data2=[NSData dataWithContentsOfURL:url2];
                id result2=[NSJSONSerialization JSONObjectWithData:data2 options:NSJSONReadingMutableContainers error:nil];

                NSMutableArray *mesID = [NSMutableArray array];//saving meesages to NSMutableArray
                NSMutableArray *status = [NSMutableArray array];    


                // i logged here and it saves  the data, now i want to display my data in table view

`

1 Ответ

2 голосов
/ 11 января 2012

сохранить в NSUserDefaults:

[[NSUserDefaults standardUserDefaults]setObject:yourArray forKey:@"theArray"];

получить его из NSUserDefaults:

[[NSUserDefaults standardUserDefaults]objectForKey:@"theArray"];

установить значения из массива в UITableViewCell:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"TheCell";
    UITableViewCell *_cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (_cell == nil) {
        _cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    _cell.textLabel.text = [yourArray objectAtIndex:indexPath.row];
    return _cell;
}

Надеюсьпомогает

обновить

, на данный момент поблизости нет Mac, поэтому мой ответ может быть немного небрежным.

В вашем заголовочном файлене забудьте добавить UITableViewDelegate и UITableViewDataSource, поэтому это будет выглядеть примерно так:

@interface yourController : UIViewController <UITableViewDelegate, UITableViewDataSource, ... some others if you need it ...> {

, затем в файле реализации (.m) вы можете просто начать набирать

-tableview

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath

, в зависимости от потребностей вашего приложения, вам может понадобиться их больше, но эти 3 должны быть там.

Для получения дополнительной информации о UITableView, пожалуйста,проверьте эту ссылку: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...