试图加载已保存的NSMutableArray

时间:2015-05-18 21:54:38

标签: ios objective-c

这是我用来保存NSMutableArray"名称"的代码。 (在用户按下保存按钮后),我认为它没有问题,但我不确定相应的代码是什么,然后在我重新打开我的应用程序时加载我的数组。任何帮助将不胜感激!

//char defined in external asm file 
extern char patterns, patterns_end, patterns1, patterns1_end,.......;
extern char palette, palette1,.......;
extern char map, map_end, map1, map1_end,.......;

//now store all addresses inside arrays (is this wrong?)
char *PAT[] = {&patterns,&patterns_end,&patterns1,&patterns1_end,.......};
char *PAL[] = {&palette,&palette_end,&palette1,&palette1_end,.......};
char *MAP[] = {&map,&map_end,&map1,&map1_end,.......};

//now access addresses to use in a function
int main(){
  while(1){   
   bgInitTileSet(0, PAT[v], PAL[v], 0, (PAT[v+1] - PAT[v]), 256*2, BG_256COLORS, 0xC000);
   bgInitMapSet(0, MAP[v], (MAP[v+1] - MAP[v]),SC_32x32, 0x7000);
   v++; 
   WaitForVBlank();
  }
} 

3 个答案:

答案 0 :(得分:1)

嗯,你已经到了一半了。你已经弄明白了如何存档对象。问题是,你如何 unarchive 呢?正如我在评论中所解释的那样,这是通过非常恰当地命名的NSKeyedUnarchiver类来完成的。

让我们从代码示例开始:

@try {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *defaultPath = [docDir stringByAppendingPathComponent:@"temporaryArray"];.

    self.yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile: defaultPath];

    if (!self.yourArray) {
        NSLog(@"Error!");
    } else {
        // Success!
    }
} @catch (NSException *exception) {
    NSLog(@"Some error happened: %@", exception);
}

NSKeyedUnarchiver类获取包含NSKeyedArchiver归档内容的文件的路径。然后它将读取此文件并返回“root”对象 - 您告诉NSKeyedArchiver存档的对象。就这么简单。 (当然,您应该包括错误处理,我在上面给出了一个简短的例子。)

如果您想要其他资源,可以阅读着名的Mattt Thompson撰写的this great introductory article,它可以很好地解释课程背后的概念。

希望这有帮助。

答案 1 :(得分:1)

如果数组的内容都是属性列表对象(NSString,NSData,NSArray或NSDictionary对象),那么您可以使用NSKeyedArchiever / NSKeyedUnarchiever以外的方式进行保存和读取:

- (IBAction)save:(id)sender 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *fullFileName = [docDir stringByAppendingPathComponent:@"temporaryArray"];
    [names writeToFile:fullFileName atomically:YES];
}

- (NSMutableArray*)readNames
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *fullFileName = [docDir stringByAppendingPathComponent:@"temporaryArray"];
    return [NSMutableArray arrayWithContentsOfFile:fullFileName];
}

答案 2 :(得分:0)

- (IBAction)save:(id)sender 
{
    // check for previous data persistancy.
    NSArray *arrData = [[NSUserDefaults standardDefaults]objectforkey:@"Paths"];
    if(arrData == nil)
    {
        // Maintain your old data and update it in new one to store the same.
        NSMutableArray *arrTempData = [NSMutableArray arrayWithArray:arrData];
        //Add Some data to old array based on your bussiness logic.
        [arrTempData add object:@"some data"];
        // Update in User Defaults
        [[NSUserDefaults standardDefaults]setobject:[NSArray arrayWithArray:arrTempData] forkey:@"Paths"];
    }
}

在代码中的某处,将代码放在下面以获取数据,

NSArray *arrSavedData = [[NSUserDefaults standardDefaults] objectforkey:@"Paths"];