的NSKeyedArchiver不会对iOS8上的工作,但工作在ios7和模拟器

问题描述:

所以我使用NSKeyedArchiver的心愿和它完美的作品在iOS 7和模拟器,但不能在设备与iOS 8的NSKeyedArchiver不会对iOS8上的工作,但工作在ios7和模拟器

这里代码我使用:

wishlist.m

- (void)viewDidLoad 
{ 
    NSString *voirexpo = @"viensdeexpo"; 
    [[NSUserDefaults standardUserDefaults] setObject:voirexpo forKey:@"voirexpo"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 


    [super viewDidLoad]; 

    self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 
    refait=0; 
    refait2=0; 
    wishlist * car2=[NSKeyedUnarchiver unarchiveObjectWithFile:@"myWishlist1.bin"]; 
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
    NSData * objectData = [defaults objectForKey:@"myWishlist1.bin"]; 
    if(objectData != nil) 
    { 
     wishlist * car3 = [NSKeyedUnarchiver 
           unarchiveObjectWithData:objectData]; 
     NSLog(@"YOOOOOOUUUUHOOOOO %@", [car3 description]); 

    } 
    NSLog(@"YOOOOOOUUUUHOOOOO %@", [car2 description]); 


    [email protected]"0"; 

    self.navigationItem.backBarButtonItem = 
    [[UIBarButtonItem alloc] initWithTitle:@"Back" 
            style:UIBarButtonItemStyleBordered 
            target:nil 
            action:nil]; 

} 

-(NSString*)pathForCacheFile:(NSString*)fileName 
{ 

    NSArray*documentDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString*path = nil; 
    if (documentDir) 
    { 
     path = [documentDir objectAtIndex:0]; 
    } 
    return [NSString stringWithFormat:@"%@/%@", path, fileName]; 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if(_dataSource) 
    { 
     _dataSource=nil; 
    } 


    _dataSource=[NSKeyedUnarchiver unarchiveObjectWithFile:[self pathForCacheFile:@"myWishlist1.bin"]]; 

    tableview.scrollEnabled=YES; 

    [tableview reloadData]; 

} 

cardescription.m(这里我选择汽车把在心愿视图)

-(NSString*)pathForCacheFile:(NSString*)fileName 
{ 

    NSArray* documentDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString* path = nil; 

    if (documentDir) 
    { 
     path = [documentDir objectAtIndex:0]; 
    } 

    return [NSString stringWithFormat:@"%@/%@", path, fileName]; 
} 

static wishlist *mywishlist; 
-(void)saveInWishlist 
{ 
    if(mywishlist) 
     mywishlist=nil; 
    mywishlist=[wishlist new]; 

    mywishlist.exponom=wishexpo; 
    mywishlist.idvoiture=TelephoneCellulaire; 
    mywishlist.imvoiture=dataimage; 
    mywishlist.objid=objectId; 

    { 
     NSMutableArray *temp=[NSKeyedUnarchiver unarchiveObjectWithFile:[self pathForCacheFile:@"myWishlist1.bin"]]; 


     //  mywishlist.imageSrc=filePath; 

     if(temp.count==0 || temp==nil) 
     { 
      NSMutableArray*newArr=[NSMutableArray array]; 

      [newArr addObject:mywishlist]; 

      [NSKeyedArchiver archiveRootObject:newArr toFile:[self pathForCacheFile:@"myWishlist1.bin"]]; 
      NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
      // userObject is the object we want to save... 
      [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:newArr] forKey:@"myWishlist1.bin"]; 
      [defaults synchronize]; 

     } 
     else 
     { 
      [temp addObject:mywishlist]; 
      [NSKeyedArchiver archiveRootObject:temp toFile:[self pathForCacheFile:@"myWishlist1.bin"]]; 
      NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
      // userObject is the object we want to save... 
      [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:temp] forKey:@"myWishlist1.bin"]; 
      [defaults synchronize]; 
     } 
    } 
} 

- (IBAction)BACKO:(id)sender { 

    [self saveInWishlist]; 

    NSLog(@"ICIII %@",wishexpo); 

    wishlist * car2=[[wishlist alloc]init]; 
    car2.exponom=wishexpo; 
    car2.idvoiture=TelephoneFix; 
    car2.imvoiture=dataimage; 
    car2.objid=objectId; 
    [NSKeyedArchiver archiveRootObject:car2 toFile:@" 
"]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wishlist" 
                message:@"This car has been successfully added to your wishlist" 
                delegate:self 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [alert show]; 

} 

-(NSString*)pathForCacheFile1:(NSString*)fileName 
{ 

    NSArray*documentDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString*path = nil; 
    if (documentDir) 
    { 
     path = [documentDir objectAtIndex:0]; 
    } 
    return [NSString stringWithFormat:@"%@/%@", path, fileName]; 
} 
+0

你有什么错误/具体问题? – Gary 2014-09-29 15:25:08

+0

这是我每次得到的错误: - [NSFileManager fileSystemRepresentationWithPath:]:无或空路径参数' – 2014-09-30 07:56:02

+0

您是否找到解决方案? – santibernaldo 2014-10-08 15:25:01

当使用NSKeyedArchiver并且仅在iOS8以后,我得到了同样的错误。就我而言,我这样做:

[defaultManager changeCurrentDirectoryPath:customDirectory]; 
[NSKeyedArchiver archiveRootObject:blankDictionary toFile:filename]; 

但它的工作我这样做的时候:

NSString fullPath = [NSString stringWithFormat:@"%@/%@", customDirectory, filename]; 
[NSKeyedArchiver archiveRootObject:blankDictionary toFile:fullPath]; 

我的猜测是,有在NSKeyedArchiver一个错误,相对路径不工作。如果搜索路径中有相对路径名,请尝试将其取出。