【发布时间】:2014-09-29 15:22:02
【问题描述】:
所以我将NSKeyedArchiver 用作愿望清单,它在 iOS 7 和模拟器上完美运行,但在 iOS 8 设备上却不行。
这里是我正在使用的代码:
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]);
rent=@"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];
}
【问题讨论】:
-
您遇到了什么错误/具体问题?
-
这是我每次得到的错误:-[NSFileManager fileSystemRepresentationWithPath:]: nil or empty path argument'
-
您找到解决方案了吗?
-
不,我使用了 NSUserDefaults 并在其中保存了一个数组。然后我得到值并将它们放入 NSDictionary
-
好的,我会尝试做同样的事情。谢谢
标签: ios objective-c ios7 ios8 nskeyedarchiver