美文网首页
iOS 多标签点赞评论评价功能

iOS 多标签点赞评论评价功能

作者: 蓦然暖心 | 来源:发表于2018-06-28 09:37 被阅读55次

最近项目中有一个评价功能,但是遇到了一个问题, 创建不同的数组从数据源中取出标签数据,再次存储,发现数据修改后,源数据也有修改,查阅多方资料,是深浅拷贝的问题,虽然多次修改,存储。new。init ,但是数组中存储的数据仍然指向源数组所在内存地址 在此作出记录

实现NSObject+Coding方法

NSObject+Coding

NSObject+Coding.h

/**

* 快速实现NSCoding协议中,编码和解码的方法

*/

@interface NSObject (Coding)

/**

* 通过Runtime解码

*

* @param decoder NSCoder对象

*/

- (void)lxz_decodeWithCoder:(NSCoder *)decoder;

/**

* 通过Runtime编码

*

* @param coder NSCoder对象

*/

- (void)lxz_encodeWithCoder:(NSCoder *)coder;

/**

* 通过Runtime实现自动copy

*

* @param zone NSZone对象

* @return 新对象

*/

- (id)lxz_copyWithZone:(NSZone *)zone;

NSObject+Coding.m

@implementation NSObject (Coding)

- (void)lxz_decodeWithCoder:(NSCoder *)decoder {

    unsigned int count = 0;

    Ivar *ivars = class_copyIvarList([self class], &count);

    if (ivars) {

        for (int i = 0; i < count; i++) {

            Ivar ivar = ivars[i];

            const char *ivarName = ivar_getName(ivar);

            NSString *keyName = [[NSString alloc] initWithUTF8String:ivarName];

            id value = [decoder decodeObjectForKey:keyName];

            [self setValue:value forKeyPath:keyName];

        }

    }

    free(ivars);

}

- (void)lxz_encodeWithCoder:(NSCoder *)coder {

    unsigned int count = 0;

    Ivar *ivars = class_copyIvarList([self class], &count);

    if (ivars) {

        for (int i = 0; i < count; i++) {

            Ivar ivar = ivars[i];

            const char *ivarName = ivar_getName(ivar);

            NSString *keyName = [[NSString alloc] initWithUTF8String:ivarName];

            id value = [self valueForKeyPath:keyName];

            [coder encodeObject:value forKey:keyName];

        }

    }

    free(ivars);

}

- (id)lxz_copyWithZone:(NSZone *)zone {

    NSObject *obj = [[[self class] allocWithZone:zone] init];

    unsigned int count = 0;

    Ivar *ivars = class_copyIvarList([self class], &count);

    if (ivars) {

        for (int i = 0; i < count; i++) {

            Ivar ivar = ivars[i];

            const char *ivarName = ivar_getName(ivar);

            NSString *keyName = [[NSString alloc] initWithUTF8String:ivarName];

            id value = [self valueForKeyPath:keyName];

            if ([value respondsToSelector:@selector(copyWithZone:)]) {

                [obj setValue:[value copy] forKey:keyName];

            } else {

                [obj setValue:value forKey:keyName];

            }

        }

    }

    free(ivars);

    return obj;

}

下载链接:https://download.csdn.net/download/qq_32782323/10504563

相关文章

  • iOS 多标签点赞评论评价功能

    最近项目中有一个评价功能,但是遇到了一个问题, 创建不同的数组从数据源中取出标签数据,再次存储,发现数据修改后,源...

  • 2018-09-06

    产投集团APP-智慧党建系统资讯模块1、新增评论回复、评论点赞、取消点赞功能2、优化回复评论UI MUI iOS ...

  • 1.6 收藏、评论、点赞、计数功能准备工作

    1、收藏、评论、点赞、计数功能准备工作 编写收藏、评论、点赞的功能按钮。计数功能是一个被动功能,无须用户有意识的主...

  • 点赞之路

    写评论,点赞,小赞200多,大赞400多,超赞1000多,诶呀,点赞点到手发软!

  • 微信营销】第八十招

    不要只点赞,要多评论 微信是社交媒体,大家都知道与别人互动的重要性。但是互动时,要多评论,不要只点赞。 点赞其实可...

  • 构建个人博客网站

    网站功能模块1.博客 a.博文 b.博客标签 c.博客分类2.评论3.点赞4.阅读5.用户:第三方登录 功能模块 ...

  • 大年初二来斗图

    评论区新开通了图片评论功能,那么多精美的祝福图片有没有让你心动的? 在评论区发出来让大家一起共享祝福吧! (点赞+...

  • 【转载】点赞功能,用mysql还是redis?

    点赞功能是目前app/web开发中基本的功能 今天我们就来聊聊 点赞、评论、收藏等这些场景的db数据库设计问题 1...

  • iOS 表情支持

    iOS如果只是评价功能需要支持表情包,用UITextView提交评论就能快速的支持表情包显示。 移动端给服务器提交...

  • 2018-09-10

    产投集团APP-智慧党建系统IOS端优化1、更新资讯详情ios 滚动条优化2、评论和回复滚动到评论位置3、新增点赞...

网友评论

      本文标题:iOS 多标签点赞评论评价功能

      本文链接:https://www.haomeiwen.com/subject/ftowyftx.html