pathForResource不返回数组

时间:2016-02-12 10:49:47

标签: ios objective-c

我有两个方法,一个用于将数组保存到文件中,另一个用于从文件中加载数组,但是当我尝试读取数组时,没有任何反应,就像数组是空的一样。 我的代码:

- (IBAction)write:(id)sender
{
    NSArray *array = [racersArray copy];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *libraryDirectory = [paths objectAtIndex:0];
    NSString *location = [libraryDirectory stringByAppendingString:@"/history.plist"];
    [array writeToFile:location atomically:YES];
}

- (IBAction)read:(id)sender
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];
    NSArray *array = (path != nil ? [NSArray arrayWithContentsOfFile:@"/history.plist"] : nil);
}

4 个答案:

答案 0 :(得分:5)

您正在/从两个不同的地方读/写。

  • 您写入searchField.text文件夹(它应该在Library或其他类似文件夹下,但我离题了。)
  • 您从应用包中读取。

答案 1 :(得分:0)

尝试使用此方法可能会对您有所帮助。

保存

-(IBAction)save_Action:(id)sender{
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
    [plistData writeToFile:plistPath atomically:YES];
}

获取路径

-(IBAction)retrive:(id)sender{
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
    {
         plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"];
    }
}

答案 2 :(得分:0)

- (IBAction)savetapped:(id)sender {
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"json.geojson"];
    [paths writeToFile:plistPath atomically:YES];
}
- (IBAction)retriveTapped:(id)sender {
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"json.geojson"];
    NSLog(@"%@",documentsPath);
    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
    {
        plistPath = [[NSBundle mainBundle] pathForResource:@"json" ofType:@"geojson"];
    }
    NSLog(@"%@",plistPath );
}

答案 3 :(得分:0)

花了一段时间才发现我实际上并不知道你想要做什么。

pathForResource为您提供应用程序包中资源的路径。你只能从那里阅读。你永远不能写在那里。有时人们在应用程序包中拥有文件的初始版本,然后将其写入其他地方。如果那是你想要的,那么你很可能需要:

(1)编写一个方法,在应用程序运行后返回存储数组的路径。

(2)"写" method调用此路径方法以了解编写数组的位置。

(3)"阅读"方法调用此路径方法以了解读取数组的位置,然后读取它。但是,数组可能为零,因为您的应用程序是第一次运行,或者数组未正确写入。在这种情况下,您使用pathForResource来获取文件在应用程序包中的路径,并从那里读取它。