2014-09-29 5 views
3

Так я использую NSKeyedArchiver для желаний и она прекрасно работает на прошивке 7 и на тренажере, но не на устройствах с прошивкой 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

+0

Это ошибка, которую я получаю каждый раз: - [NSFileManager fileSystemRepresentationWithPath:]: nil или пустой аргумент пути ' –

+0

Вы нашли решение? – santibernaldo

ответ

1

У меня такая же ошибка при использовании NSKeyedArchiver и только с iOS8. В моем случае, я делаю это:

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

Но он работал, когда я сделал это:

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

Я думаю, что есть ошибка в NSKeyedArchiver и относительные имена пути не работают. Если в пути поиска есть относительные пути, попробуйте их вынуть.

 Смежные вопросы

  • Нет связанных вопросов^_^