Итерация по NS-массиву obs - PullRequest
0 голосов
/ 24 февраля 2012

Мне нужно взять эту структуру данных, nsmutablearray, перебрать каждый индекс и распечатать каждое поле в текстовое поле. каждая кнопка «вперед» увеличивает данные вперед и «назад» возвращается назад. Мне действительно тяжело заставить это работать должным образом, кто-нибудь знает, что я делаю неправильно. Помните, что объект в массиве, называемый info_holder, является объектом, который содержит 3 строки и один счетчик:

#import "ZDViewController.h"

@implementation ZDViewController
@synthesize password;
@synthesize count;
@synthesize web;
@synthesize username;
@synthesize header;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSMutableArray *array = [[NSMutableArray alloc] init];
    info_holder *set1 = [[info_holder alloc] init];
    info_holder *set2 = [[info_holder alloc] init];
    info_holder *set3 = [[info_holder alloc] init];
    info_holder *set4 = [[info_holder alloc] init];
    info_holder *set5 = [[info_holder alloc] init];
    [set1 SetUser: @"info1"]; //temporary information until big is fixed
    [set1 SetPass: @"info2"];
    [set1 SetKey: @"webinfo1"];
    [set1 SetCount: 0];
    [set2 SetUser: @"info3"];
    [set2 SetPass: @"info4"];
    [set2 SetKey: @"webinfo2"];
    [set2 SetCount: 0];
    [set3 SetUser: @"info5"];
    [set3 SetPass: @"info6"];
    [set3 SetKey: @"webinfo3"];
    [set3 SetCount: 0];
    [set4 SetUser: @"info7"];
    [set4 SetPass: @"info8"];
    [set4 SetKey: @"webinfo4"];
    [set4 SetCount: 0];
    [set5 SetUser: @"info9"];
    [set5 SetPass: @"info10"];
    [set5 SetKey: @"Webinfo5"];
    [set5 SetCount: 0];

}

- (void)viewDidUnload
{
    [self setHeader:nil];
    [self setWeb:nil];
    [self setPassword:nil];
    [self setCount:nil];
    [self setUsername:nil];
    [super viewDidUnload];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)increment:(id)sender {
    if(username.text==@"test")
        username.text=@"test2";
    else
        username.text=@"test";
    //this should print a new username NSSTRING, wedsite NSTRING, password NSTRING and INEGER counter, heald in the info_holder object, incremented per click backwards 
}

- (IBAction)decrement:(id)sender {

}
- (IBAction)Inc:(id)sender {

}
- (IBAction)textFieldDoneEditing:(id)sender {
    [sender resignFirstResponder];
}
- (IBAction)backgroundTap:(id)sender {
    [web resignFirstResponder];
    [username resignFirstResponder];
    [count resignFirstResponder];
    [password resignFirstResponder];
}
@end

и мой главный:

#import <UIKit/UIKit.h>

#import "ZDAppDelegate.h"
#import "info_holder.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZDAppDelegate class]));
    }
}

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012
- (IBAction)forwards:(id)sender {
    //this should print a new username NSSTRING, wedsite NSTRING, password NSTRING and INEGER counter, heald in the info_holder object, incremented per click forward
for(int i=0;i<your_array.count;i++){
    username.text=[your_array objectAtIndex:i];
    password.text=[your_array objectAtIndex:i];
    key.text.text=[your_array objectAtIndex:i];


}
}

Примечание-1: Я предполагаю, что ваши имена текстовых полей будут username, password и key

Примечание-2 : Ваш вопрос слишком длинный, и я думаю, что никто не прочитает так много кода, чтобы найти ваш вопрос. Просто поделитесь тем, что вам нужно.

1 голос
/ 24 февраля 2012

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

Во-вторых, ваши сеттеры в классе info_holder (который должен быть InfoHolder) имеют потенциальные проблемы.

anпример установки должен выглядеть следующим образом:

 - (void)setUser:(NSString *)username
{    
    [username retain];
    [uname release];
    uname=username;     
}

Вы не указали, что не работает, но одна проблема заключается в том, что вы не сохраняете эти строки.

НА ОСНОВЕ КОММЕНТАРИЙ Вам необходимо объявить логины свойством.

в ZDViewController.h

@interface ZDViewController : UIViewController

@property (strong, nonatomic) NSMutableArray *logins;

Затем в ZDViewController.m

@implementation ZDViewController

@synthesize logins;
.
.
.

- (void)viewDidLoad {
logins = [NSMutableArray array];
.
.
.
}

Затем вы можете получить доступ к self.loginsиз любого места в вашем классе

0 голосов
/ 25 февраля 2012

Вы сохранили свои объекты info_holder в экземпляре NSMutableArray. Если это так, то вы можете получить доступ к элементу (в вашем случае, к экземплярам владельца информации) изменяемого массива любым из следующих методов,for(ClassName *tmp in _arrayName){ tmp.property1;tmp.property2;..... }или если вы хотите, чтобы это было в качестве конкретного индексаfor(int index=0;index<[_arrayName count];index++){ ClassName *tmp = [_arrayName objectAtIndex:index];tmp.property1;tmp.property2;.....},Я точно не могу понять твою проблему, но из твоих сочинений я думаю, что ты выше может быть решением.Если нет, дайте мне знать ваш вопрос, если это, безусловно, помогло вам, то примите ответ. Примечание: Как подсказывает @dbrajkovic, всегда следуйте правилам именования в ваших программах, которые обеспечивают более гибкую читабельность.

...