Использование метода класса для создания NSArray - PullRequest
0 голосов
/ 23 апреля 2011

Я снова захожу в Интернет со шляпой в руках.:)

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

.h:

@interface NetworkData : NSObject {

}

    +(NSString*) getCachePath:(NSString*) filename;
    +(void) writeToFile:(NSString*)text withFilename:(NSString*) filePath;
    +(NSString*) readFromFile:(NSString*) filePath;
    +(void) loadParkData:(NSString*) filename;
    +(NSArray*) generateColumnArray:(int) column type:(NSString*) type filename:(NSString*) filename;

@end

.m:

#import "NetworkData.h"
#import "JSON.h"
#import "Utility.h"


@implementation NetworkData

+(NSString*) getCachePath:(NSString*) filename {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0], filename];
    [paths release];
    return cachePath;
 }

+(void) writeToFile:(NSString*)text withFilename:(NSString*) filename {
    NSMutableArray *array = [[NSArray alloc] init];
    [array addObject:text];
    [array writeToFile:filename atomically:YES];
    [array release];
}

+(NSString*) readFromFile:(NSString*) filename {
    NSFileManager* filemgr = [[NSFileManager alloc] init];
    NSData* buffer = [filemgr contentsAtPath:filename];
    NSString* data = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
    [buffer release];
    [filemgr release];
    return data;
}

+(void) loadParkData:(NSString*) filename {
    NSString *filePath = [self getCachePath:filename];
    NSURL *url = [NSURL URLWithString:@"http://my.appserver.com"];
    NSData *urlData = [NSData dataWithContentsOfURL:url];
    [urlData writeToFile:filePath atomically:YES];
}

+(NSArray*) generateColumnArray:(int) column type:(NSString*) type filename:(NSString*) filename {
    //  NSLog(@"generateColumnArray called: %u %@ %@", column, type, filename);
    //  productArray = [[NSMutableArray alloc] init];
    //  NSString *filePath = [self getCachePath:filename];
    //  NSString *fileContent = [self readFromFile:filePath];
    //  NSString *jsonString = [[NSString alloc] initWithString:fileContent];
    //  NSDictionary *results = [jsonString JSONValue];
    //  NSArray *eventsArray = [results objectForKey:type];
    //  NSInteger* eventsArrayCount = [eventsArray count];
    //  NSInteger* a;

    //  for (a = 0; a < eventsArrayCount; a++) {
    //      NSArray *eventsColSrc = [eventsArray objectAtIndex:a];
    //      NSArray *blockArray = [eventsColSrc objectAtIndex:column];
    //      [productArray addObject:blockArray];
    //      [blockArray release];
    //  }

    //  [eventsArray release];
    //  [results release];
    //  [jsonString release];
    //  [fileContent release];
    //  [filePath release];

    //  [a release];
    //  [eventsArrayCount release];

    //  return productArray;
    }

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

@end

.. и вызов:

NSArray* dataColumn = [NetworkData generateColumnArray:0 type:@"eventtype_a" filename:@"data.json"];

Код в методе работает (не очень, я знаю - нуб на работе).По сути, это спорный вопрос, потому что простой вызов (без активного кода, как показано) приводит к закрытию приложения до того, как на заставке появляется что-то еще.

Держу пари, что это хедлайпер - большое спасибо за любые знания, которые выможет упасть

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Ну, вы не возвращаете правильное значение из вашего закомментированного кода. Что вы используете «dataColumn» для следующего? Запуск под отладчиком должен указать вам на проблему, не так ли?

0 голосов
/ 23 апреля 2011

Если ваше приложение дает сбой, вполне вероятно, что в консоли появится сообщение, объясняющее почему. Всегда полезно включать это сообщение при обращении за помощью.

Одна очевидная проблема заключается в том, что ваш метод + generateColumnArray ... должен возвращать указатель на NSArray, но со всем кодом в методе, закомментированным, он ничего не возвращает, и кто знает, что назначается до dataColumn. Попробуйте просто добавить return nil; в конец метода и посмотреть, исправит ли это ошибку. Опять же, посмотрите на сообщение об ошибке, чтобы понять, почему именно происходит сбой кода, и это приведет вас к решению.

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