У меня проблемы с использованием Singleton для передачи массива в Objective-c.(код включен) - PullRequest
0 голосов
/ 21 марта 2012

Итак, я создаю массив с именем fruits, который я хотел бы разделить между несколькими представлениями. Это мой код:

#import <foundation/Foundation.h>
@interface MyManager : NSObject {
    NSMutableArray *fruits;
}
@property (nonatomic, retain) NSMutableArray *fruits;
+ (id)sharedManager;
@end

#import "MyManager.h"
static MyManager *sharedMyManager = nil;
@implementation MyManager
@synthesize fruits;
#pragma mark Singleton Methods
+ (id)sharedManager {
    @synchronized(self) {
        if (sharedMyManager == nil)
            sharedMyManager = [[self alloc] init];
    }
    return sharedMyManager;
}
- (id)init {
    if ((self = [super init])) {
        fruits = [[NSMutableArray alloc] init];
    }
    return self;
}
-(void) dealloc{
    self.fruits = nil;
    [super dealloc];
}
@end

Теперь я использую следующий код, чтобы я мог использовать тренировки в новом представлении

#import "MyManager.h"
@interface Chest : UIViewController {
    IBOutlet MyManager *fruits;
}
@property (nonatomic, retain) IBOutlet MyManager *fruits;
-(IBAction) goToList: (id) sender;
@end

Когда нажимается кнопка, вызывается goToList, и я заполняю свой массив fruits

#import "Chest.h"
@implementation Chest
@synthesize fruits;
-(IBAction) goToList:(id)sender{
    MyManager *fruits = [MyManager sharedManager];
    NSString *filePath;
    NSString *fileContents;
    filePath = [[NSBundle mainBundle] pathForResource:@"chest_strength" ofType:@"csv"];
        fileContents = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
        fruits = [fileContents componentsSeparatedByString:@"\n"];
}

Когда я выводлю элементы * fruits в этом представлении, все работает нормально. Теперь, когда я пытаюсь получить доступ к этой же переменной в другом представлении, он говорит, что массив пуст. Вот код для второго представления:

@interface List : UIViewController {
    IBOutlet MyManager *fruits;
}
@property (nonatomic, retain) IBOutlet MyManager *fruits;
@end

#import "List.h"
#import "MyManager.h"
@implementation List
@synthesize fruits
NSLog(@"%@", fruits);  //This is the part that isn't displaying correctly.  I'm getting a null here

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

Спасибо всем, кто отвечает. Эта проблема серьезно утомляет меня, и мне нужно закончить этот проект как можно скорее. Очень ценится.

1 Ответ

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

Вы изменили несколько вещей в этом вопросе, но основная проблема остается: массив является свойством вашего синглтона, и вы не рассматриваете его как таковой.

Всякий раз, когда вы обращаетесь к массиву вне синглтона, делайте это следующим образом:

[MyManager sharedManager].fruits

Если вы часто обращаетесь к нему, вы можете создать локальный ивар, но вы определенно не захотитеэто не IBOutlet, который вы делаете в своем последнем примере кода.Как это когда-нибудь будет установлено?

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