`
zjjzmw1
  • 浏览: 1366124 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

文本存储自定义对象。

    博客分类:
  • iOS
阅读更多

 

 

 /**

     *  缓存model 的方法

     */

    TestModelObject *testModel = [TestModelObjectmodelWithDictionary:dict];

    NSMutableArray * dataArray = [NSMutableArrayarrayWithCapacity:50];

    //testModel类型变为NSData类型

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:testModel];

    //存放数据的数组将data加入进去

    [dataArray addObject:data];

    //记住要转换成不可变数组类型

    NSArray * array = [NSArray arrayWithArray:dataArray];

    NSUserDefaults *user = [NSUserDefaultsstandardUserDefaults];

    [user setObject:array forKey:@"testModelArray"];

    NSArray *resultArray = [user objectForKey:@"testModelArray"];

    TestModelObject *resultModel = [NSKeyedUnarchiver unarchiveObjectWithData:[resultArray objectAtIndex:0]];

    NSLog(@"====%@,%d",resultModel.girl1,resultModel.age);

 

 

 

 

 

 

 

NSMutableData *data = [NSMutableDatadata];

                    NSKeyedArchiver *archiver = [[NSKeyedArchiveralloc] initForWritingWithMutableData:data];

                    [archiver encodeObject:self.myDataArrayforKey:@"myArchiverDataKey"];

                    [archiver finishEncoding];

                if ([ToolessaveFileToLoc:@"myFriendsList"theFile:data]) {

                    DDLogDebug(@"保存成");

                }else{

                    DDLogDebug(@"保存失败");

                }

                dispatch_async(dispatch_get_main_queue(), ^{

                    [wSelf myReloadTableView];

                });

            });

        }else{

            NSData *myData = [NSDatadata];

            self.myFriendListData = [NSDatadataWithData:[ToolesgetDataFileFromLoc:@"myFriendsList"into:myData]];

            if (self.myFriendListData.length > 0) {

                DDLogDebug(@"获取成功");

                NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:self.myFriendListData];

                self.myDataArray = [unarchiver decodeObjectForKey:@"myArchiverDataKey"];

 

            }else{

                DDLogDebug(@"获取失败.");

 

            }

 

 

#pragma mark - 下面两个方法可以存储自定义的对象---TMCache就不行。

 

+(BOOL)saveFileToLoc:(NSString *) fileName theFile:(id) file{

    NSString *Path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *CachePath = [fileName stringByReplacingOccurrencesOfString: @"/"withString: @"_"];

    NSString *filename=[Path stringByAppendingPathComponent:CachePath];

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    if (![fileManager fileExistsAtPath:filename]) {

        if (! [fileManager createFileAtPath:filename contents:nilattributes:nil]) {

            NSLog(@"createFile error occurred");

        }

    }

    return  [file writeToFile:filename atomically:YES];

}

 

+(BOOL) getFileFromLoc:(NSString*)filePath into:(id)file {

    NSString *Path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *CachePath = [filePath stringByReplacingOccurrencesOfString: @"/"withString: @"_"];

    NSString *filename=[Path stringByAppendingPathComponent:CachePath];

    

    if ([file isKindOfClass:[NSMutableDictionaryclass]]) {

        [file setDictionary: [NSMutableDictionarydictionaryWithContentsOfFile:filename]];

        if ([file count]==0) {

            returnNO;

        }

    }elseif ([file isKindOfClass:[NSMutableArrayclass]]) {

        [file addObjectsFromArray: [NSMutableArrayarrayWithContentsOfFile:filename]];

        if ([file count]==0) {

            returnNO;

        }

    }elseif ([file isKindOfClass:[NSDataclass]]) {

        file = [NSDatadataWithContentsOfFile:filename];

        if ([file length] ==0) {

            returnNO;

        }

    }

    

    returnYES;

}

 

+(NSData *) getDataFileFromLoc:(NSString*)filePath into:(id)file {

    NSString *Path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *CachePath = [filePath stringByReplacingOccurrencesOfString: @"/"withString: @"_"];

    NSString *filename=[Path stringByAppendingPathComponent:CachePath];

    

    if ([file isKindOfClass:[NSDataclass]]) {

        file = [NSDatadataWithContentsOfFile:filename];

        if ([file length] ==0) {

            returnnil;

        }

        return file;

    }

    returnnil;

    

 

}

 

 

方法1,archiveRootObject:toFile,它只能把1个对象写入到同一个文件中。

 

 

 

方法2,通过使用 NSMutableData和NSKeyedArchiver,可以将多个对象写入到同一个文件中。例如

 

 

NSMutableData *data = [NSMutableData data];

 

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

[archiver encodeObject:testArray1 forKey:@"testArray1"];

 

[archiver encodeObject:testArray2 forKey:@"testArray2"];

[archiver finishEncoding];

[data writeToFile:path atomically:YES];

一:数据存储方式不同一个是序列化和反序列化后存储文件,另一个就是直接的存储文件了。

 

二:对象不同,archiveRootObject:toFile:可以将IOS常见的NSData,NSArray等写入文件,也可以将你自己定义的类型(必须实现了序列和凡序列化的,即遵循NSCoding协议,encodeWithCoder和initWithCoder:方法)写入文件,而writeToFile只能将NSDate等IOS常见的数据类型存入文件,因为本身遵循NSCoding协议。

 

#pragma mark - 下面两个方法可以存储自定义的对象---TMCache就不行。

 

+(BOOL)saveFileToLoc:(NSString *) fileName theFile:(id) file{

    NSString *Path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *CachePath = [fileName stringByReplacingOccurrencesOfString: @"/"withString: @"_"];

    NSString *filename=[Path stringByAppendingPathComponent:CachePath];

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    if (![fileManager fileExistsAtPath:filename]) {

        if (! [fileManager createFileAtPath:filename contents:nilattributes:nil]) {

            NSLog(@"createFile error occurred");

        }

    }

    return  [file writeToFile:filename atomically:YES];

}

 

+(BOOL) getFileFromLoc:(NSString*)filePath into:(id)file {

    NSString *Path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *CachePath = [filePath stringByReplacingOccurrencesOfString: @"/"withString: @"_"];

    NSString *filename=[Path stringByAppendingPathComponent:CachePath];

    

    if ([file isKindOfClass:[NSMutableDictionaryclass]]) {

        [file setDictionary: [NSMutableDictionarydictionaryWithContentsOfFile:filename]];

    }elseif ([file isKindOfClass:[NSMutableArrayclass]]) {

        [file addObjectsFromArray: [NSMutableArrayarrayWithContentsOfFile:filename]];

    }elseif ([file isKindOfClass:[NSDataclass]]) {

        file = [NSDatadataWithContentsOfFile:filename];

    }

    if ([file count]==0) {

        returnNO;

    }

    returnYES;

 

}

分享到:
评论

相关推荐

    安卓富文本编辑器相关-android自定义控件图文编辑框菊花样式Progressbar.zip

    - 创建SpannableStringBuilder对象,用于存储格式化文本。 - 应用不同的Span对象,如CharacterStyle、ForegroundColorSpan、BackgroundColorSpan等,来改变文本的样式。 - 提供接口供用户选择样式,如字体、颜色...

    自定义对象的编辑窗口1

    在Unity引擎中,自定义对象的编辑窗口是一个强大的特性,允许开发者为特定的游戏对象或脚本类型创建定制化的Inspector视图。这使得在编辑阶段能够更直观、更高效地配置和调整组件属性。标题提到的"自定义对象的编辑...

    把数组和自定义对象转换成字符串.docx

    在IT领域,尤其是在JavaScript编程中,经常需要将数据结构如数组和自定义对象转换为字符串,以便于在网络请求(如URL参数)、存储(如cookies)或其他需要文本表示的场景中使用。本文将深入探讨如何实现这种转换,并...

    把数组和自定义对象转换成字符串.pdf

    在IT行业中,数组和自定义对象的转换成字符串是一个常见的需求,特别是在进行数据传输、存储或者URL编码时。本文将详细讲解如何将数组和自定义对象转换为字符串,并且能够还原回原来的类型。 首先,我们要解决的...

    WebView 自定义长按选择,实现收藏 / 分享选中文本

    总之,实现WebView自定义长按选择并提供收藏和分享选中文本的功能,涉及到WebView的事件监听、JavaScript与Java的交互、自定义菜单的创建以及Android的分享和存储机制。这需要开发者具备扎实的Android基础和一定的...

    文本文件解析对象

    文本文件解析对象是编程中处理文本数据的重要工具,主要用于读取、分析和操作文本文件中的内容。在不同的编程环境中,有各种不同的库和模块来支持这样的功能。在本例中,我们提到了与文本文件解析相关的几个文件,...

    Qt自定义QLabel滚动显示文本文字,label可根据文本长度自动开启滚动显示

    这可以通过重写`paintEvent()`函数来完成,使用`QPainter`对象在适当的位置绘制文本。 `dialog.cpp`和`dialog.h`文件则包含了对话框类的实现,这个对话框可能包含了一个自定义的QLabel实例。对话框类可能有一个`...

    自定义选中文本布局demo

    在Android开发中,自定义选中文本布局是一个常见的需求,特别是在创建富文本编辑器、阅读应用或者需要用户交互选择特定文字的场景下。"自定义选中文本布局demo" 提供了一个实例,帮助开发者理解如何在Android应用中...

    自定义List控件,可以显示图片和文本

    在这个场景中,我们关注的是一个自定义的List控件,它允许在列表项中同时显示图片和文本。这个控件是基于CList的派生,CList是MFC(Microsoft Foundation Classes)库中的一个类,用于管理集合对象,如列表或数组。 ...

    自定义AutoCompleteTextView下拉列表控件

    在提供的`TestAutoComplete`文件中,可能包含了实现上述功能的示例代码,包括自定义适配器的实现、逐字提示的逻辑以及如何将自定义对象与`AutoCompleteTextView`连接起来的示例。通过分析和学习这个例子,开发者可以...

    11在vc平台中开发树形视图和复选框的组合框树形视图控件,可以显示彩色文本,自定义项目的字体样式.rar

    本项目主要探讨如何在VC平台上利用MFC扩展这一控件,实现一个结合了复选框功能、支持彩色文本显示以及自定义字体样式的树形视图控件。 1. **树形视图控件**:CTreeViewCtrl是MFC中的类,用于创建和管理树形视图。它...

    易语言自定义数据类型变量保存

    它可能是易语言中一个用于序列化自定义数据类型的工具,将复杂的数据结构转换为可存储的格式,如文本文件或二进制文件。序列化是将程序中的对象状态转换为可以存储或传输的形式的过程,反序列化则是相反的过程,将...

    SQL SERVER的数据类型自定义

    `nchar`和`nvarchar`是Unicode字符类型,能够存储多语言文本,而`char`和`varchar`则更适合ASCII字符集。 3. **日期和时间类型**:如`datetime`和`smalldatetime`,用于存储日期和时间信息。`datetime`提供更高的...

    Winform TextBox支持垂直居中自定义控件

    在自定义控件中,这通常用于保存控件的元数据,如本地化文本或图标。 为了使自定义控件支持自动折行并保持垂直居中,开发者可能需要在`MyTextBox`类中添加一些额外的逻辑。例如,当`WordWrap`属性被设置为`True`时...

    易语言机读文本COM对象模块

    这些格式的文本数据结构清晰,易于被各种编程语言解析和操作,常用于数据交换和存储。 易语言机读文本COM对象模块源码提供了以下功能: 1. **文本读取**:模块包含读取文本文件的函数,可以从磁盘加载文本文件内容...

    用js实现自定义标签

    // 定义一个数组存储自定义标签及其对应的HTML标签 var mk = new Array( '<red>', ';">', '</red>', '</span>', '<big>', ';">', '</big>', '</span>', '<zhuo>', ';">', '</zhuo>', '</span>', '<next>', ' ...

    SQLServer2005 批量查询自定义对象脚本

    批量查询这些自定义对象的脚本可以帮助快速获取和理解数据库的结构。本文将详细介绍如何使用SQL Server 2005的系统函数`object_definition`和系统表`sysobjects`来实现这个功能。 `object_definition`函数是SQL ...

    qt 生成自定义二维码

    总之,使用Qt生成自定义二维码涉及到的主要技术点包括Qt的QrCode类、图像处理、文字绘制以及面向对象编程,通过合理的封装和设计,可以构建出功能强大的二维码生成工具。在进行开发时,不断实践和学习,对Qt库的深入...

    富文本编辑器,图片上传阿里云服务器

    阿里云提供了多种服务来存储和处理图片,如OSS(Object Storage Service)对象存储服务。OSS是阿里云提供的大规模、低成本、高可靠的云存储服务,适合存储静态资源,如图片、视频、文档等。开发者可以通过HTTP/HTTPS...

    SharedPreferences保存对象.zip

    在"SharedPreferences保存对象.zip"这个文件中,很可能是通过示例讲解了如何将自定义对象存储到SharedPreferences中,因为默认SharedPreferences并不直接支持对象的序列化和反序列化。 在Android中,若想将自定义...

Global site tag (gtag.js) - Google Analytics