Как передать значение массива из одного класса в другой класс - PullRequest
2 голосов
/ 26 марта 2012

Как передать значение массива из класса делегата для просмотра класса контроллера

const char *query2=[tempQuery UTF8String];
NSMutableArray *arr1 = [[NSMutableArray alloc]init];;
if (sqlite3_prepare_v2(database,query2,-1,&statement1,NULL)==SQLITE_OK) {
    //NSLog(@"vt", vt);

    while (sqlite3_step(statement1)==SQLITE_ROW) {
        vt=[[[Question1 alloc]init]autorelease];
        vt.question=[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement1,3)];
        [arr1 addObject:vt.question];
        NSLog(@"arr1 is %@",[arr1 description]);

Где arr1 - значение массива. Так что значение массива должно быть передано в другой класс.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 26 марта 2012

Попробуйте создать массив в вашем appDelegate.Таким образом, он может быть доступен в любом контроллере представления, вызывая ваш appDelegate:

myAppDelegate *myDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
arrayInView = [myDelegate msgFilter];
0 голосов
/ 26 марта 2012

Вы можете передать NSString или NSMutableArray, используя NSUserDefault метод ... NSUserDefaultExample и Сохранение / получение данных с использованием NSUserDefaults

Для сохранения

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];

 // saving an NSInteger
 [prefs setInteger:42 forKey:@"integerKey"];

 // saving a Double
 [prefs setDouble:3.1415 forKey:@"doubleKey"];

 // saving a Float
 [prefs setFloat:1.2345678 forKey:@"floatKey"];

  // saving an array
  NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
  [prefs setObject:data forKey:@"lastResults"]

 // This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
 [prefs synchronize];

Для получения

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];

// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@"integerKey"];

// getting an Float
float myFloat = [prefs floatForKey:@"floatKey"];

// getting an array
 NSData *dataRepresentingSavedArray = [prefs objectForKey:@"lastResults"];
 if (dataRepresentingSavedArray != nil)
 {
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    if (oldSavedArray != nil)
            objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    else
            objectArray = [[NSMutableArray alloc] init];
 }

или

filename *detailViewController = [[filename alloc] initWithNibName:@"filename" bundle:nil];
detailViewController.audio=@"yourData";
[self presentModalViewController:detailViewController animated:YES];
[detailViewController release];

Объявить в filename.h

 NSArray *audio;

 @property(nonatomic,retain) NSArray *audio;

и имя файла.m

 @synthesize audio;

вот и все.

0 голосов
/ 26 марта 2012

просто создайте Array метод, как в + (NSMutableArray *) getData в классе делегата

+(NSMutableArray *)getData
{
const char *query2=[tempQuery UTF8String];
NSMutableArray *arr1 = [[NSMutableArray alloc]init];;
if (sqlite3_prepare_v2(database,query2,-1,&statement1,NULL)==SQLITE_OK) {
    //NSLog(@"vt", vt);

    while (sqlite3_step(statement1)==SQLITE_ROW) {

        [arr1 addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement1,3)]];
        NSLog(@"arr1 is %@",[arr1 description]);
}
}
return [arr1 autorelease];
}

в вашем контроллере представления просто вызовите метод как

 NSMutableArray * data=[[delegate getData]retain];
0 голосов
/ 26 марта 2012

В классе, где вы хотите передать этот массив "arr1", выполните следующие шаги: 1) определите там массив (допустим, это aryTest) 2) создайте для него свойство 3) синтезируйте его

Теперьв представлении, где вы получаете этот массив "arr1".Из этого представления всякий раз, когда вы пишете код для перехода к следующему представлению, выполните следующие шаги:

NextViewController *objVc = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
objVc.aryTest = arr1;
[self.navigationController pushViewController:vc animated:YES];
[vc release];

, поэтому вы получите этот массив arr1 для следующего представления в массиве aryTest.

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