簡體   English   中英

使用類方法創建NSArray

[英]Using a class method to create an NSArray

我戴着帽子再次進入互聯網。 :)

我正在嘗試使用類方法返回包含其他數組作為元素的填充數組:

。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"];

該方法中的代碼有效(我知道這很不漂亮-工作中的菜鳥)。 這本質上是沒有實際意義的,因為僅調用它(沒有活動代碼,如圖所示)會使應用程序在啟動屏幕顯示任何其他內容之前退出。

我敢打賭這是個頭條新聞-非常感謝您可以丟棄的任何知識。

如果您的應用崩潰,則控制台中很可能會出現一條消息,告訴您原因。 尋求幫助時包括該消息總是很有幫助的。

一個明顯的問題是,您的+ generateColumnArray ...方法應該返回一個指向NSArray的指針,但是注釋掉該方法中的所有代碼后,它不會返回任何內容,並且who-knows-what-knows- dataColumn - dataColumn - dataColumn - dataColumn - dataColumn分配給了dataColumn 嘗試僅添加return nil; 到方法末尾,看看是否可以解決崩潰問題。 但是,請再次查看錯誤消息,以明確了解代碼為什么崩潰,這將帶您找到解決方案。

好吧,您沒有從注釋掉的代碼中返回有效值。 接下來,您如何使用“ dataColumn”? 在調試器下運行應該將您指向該問題,對嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM