项目中遇到的问题解决:深刻认识到类的初始化

-(NSArray *)getdataFromDatabase
{
    NSString *path = [self getDBPath];
    NSLog(@"path ==== %@",path);
    NSLog(@"self.getDBPath == %@",[self getDBPath]);

    FMDatabase *membersDB = [FMDatabase databaseWithPath:path];
    if (![membersDB open]) {
        NSLog(@"Failed to open membersDB");
        return nil;
        [membersDB close];
    }
    NSMutableArray *array = [NSMutableArray array];
    FMResultSet *rs = [membersDB executeQuery:@"SELECT * FROM Member"];//这里数组为空  容易出错
    <pre name="code" class="objc">    <span style="color:#FF0000;">
    Member *member = [[Member alloc]init];
    while ([rs next])
    { member.name = [rs stringForColumn:@"Name"];
      member.age = [rs intForColumn:@"Age"];
      member.sex = [rs intForColumn:@"Sex"];
      member.height = [rs intForColumn:@"Height"]; member.Weight = [rs intForColumn:@"Weight"];
      member.icon = [UIImage imageWithData:[rs dataForColumn:@"Photo"]];
     NSLog(@"member.name =============  %@",member.name);
     [array addObject:member];</span>
    }
     [membersDB close];<span style="color:#FF0000;">
     NSLog(@"array[0] == %@,\narray[1] == %@,\narray[2]==%@",[array[0] name],[array[1] name],[array[2] name]);</span>
     return [array copy];
 }

</span>

打印信息如下:

在while循环中打印是正确的,不重复的,可以循环结束在打印我们添加成员的数组,发现都是重复的,也就是都是同一个对象!!!!

泪奔啊。。。。。。这时对类的理解不深刻啊,我在循环外加的 Member *member = [[Member alloc]init];初始化,也就是说再循环中我一直在对同一个对象进行重复操作,

,以至于添加成员的数组都是同一个对象,不同的个数而已。

所以解决办法应该是在循环中初始化,这样一来,每次循环都是一个新的对象(内存地址),这样一来就正确了!!!

-(NSArray *)getdataFromDatabase
{
    NSString *path = [self getDBPath];
    NSLog(@"path ==== %@",path);
    NSLog(@"self.getDBPath == %@",[self getDBPath]);

    FMDatabase *membersDB = [FMDatabase databaseWithPath:path];
    if (![membersDB open]) {
        NSLog(@"Failed to open membersDB");
        return nil;
        [membersDB close];
    }
    NSMutableArray *array = [NSMutableArray array];
    FMResultSet *rs = [membersDB executeQuery:@"SELECT * FROM Member"];//这里数组为空  容易出错

    while ([rs next])
    {
<pre name="code" class="objc">     <span style="color:#FF0000;">Member *member = [[Member alloc]init];</span>
      member.name = [rs stringForColumn:@"Name"];
      member.age = [rs intForColumn:@"Age"];
      member.sex = [rs intForColumn:@"Sex"];
      member.height = [rs intForColumn:@"Height"]; member.Weight = [rs intForColumn:@"Weight"];
      member.icon = [UIImage imageWithData:[rs dataForColumn:@"Photo"]];
      NSLog(@"member.name =============  %@",member.name);
     [array addObject:member];</span>
    }
     [membersDB close];<span style="color:#FF0000;">
     NSLog(@"array[0] == %@,\narray[1] == %@,\narray[2]==%@",[array[0] name],[array[1] name],[array[2] name]);</span>
     return [array copy];
 }

<pre name="code" class="objc"><pre name="code" class="objc"> <span style="color:#FF0000;"></span>




项目中遇到的问题解决:深刻认识到类的初始化

时间: 2024-11-05 12:22:52

项目中遇到的问题解决:深刻认识到类的初始化的相关文章

Maven项目中mvn clean找不到测试类问题

在Maven项目中进行单元测试,但mvn clean后重新mvn install项目,再次进行单元测试,会有以下的错误, <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.i

js中遍历删除数组中的项(项目中遇到的问题解决)

代码如下: for (var key=0;key<$scope.pageContent.messages.length;key++){ if($scope.pageContent.messages[key].messagePushType==undefined){ $scope.pageContent.messages.splice(key,1); key-=1; } } 重点在与key-=1,要让key随着被截取后数组长度的变化而变化,截取一个,key少一次.

Maven项目中,编译proto文件成Java类

新建Maven项目 新建一个 Maven 项目: pom定义了最小的maven2元素,即:groupId,artifactId,version. groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo artifactId: 项目的通用名称 version:项目的版本 packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar

Android 项目中执行java的main方法

Android 项目中执行java的main方法 导语 今日,在android项目中写了一个工具类,为了简单测试一下输出,就只直接在类中加上了main方法,于是问题来了: 解决方法是网上找到了,已经解决了,在此记录一下. 右击项目名,调出Properties窗口,打开Run/Debug Settings 标签,右边即列出了这个项目中含有main方法的所有java类,双击你要允许的java类:

自定义Button供整个项目使用,一个项目中只用这一个Button即可

在做项目的过程中会发现经常需要自定义Button以便实现图片和文字的随意摆放,这样整个项目中就会有很多多余的类,具体的缺点我先列举几个场景. 1.一个button里面放置一个图片和一个文字,上面是图片,下面是文字,产品要求图片的尺寸必须是30*30,这时我们可以自定义一个button把图片尺寸写死.突然有一天又来了一个新的需求,图片要求40*40,又要新建一个类,突然有一天又来了一个需求,图片在下面,又要新建一个类,突然有一天又来了一个需求,图片的大小要根据屏幕的尺寸变化而变化,又新建了一个类,

Visual Studio 2008项目中WinForm窗体图标显示为类图标,只能打开代码而无法打开视图问题解决

背景: 今天打开一个Winform项目的时候,图标显示为类文件的样子而不是窗体的样子,在代码中右键也没有View Designer选项,双击图标打开的是代码而非窗体设计界面,百度后也没有找到解决方案. 解决方法(不一定通用): 1.编译项目查看有没有错误. 2.查看WinForm窗体继承的窗体文件可以打开不?有没有问题 3.签出代码,在undocheckout,编译,查看是否可以了 4.查看该项目有没有被其他人签出,如果被签出,让他们签入,再获取一下最新版本代码,编译,看看是不是可以了(我在这一

关于在项目中多个类继承FragmentPagerAdapter时,改变getCount(),FC的问题解决

在贸易通项目,报以下FC 08-21 09:56:21.515: E/AndroidRuntime(1629): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 2, found: 50000 Pa

如何在程序开发项目中选择合适的 JavaScript 框架,节省时间和成本的9款极佳的JavaScript框架介绍

从技术上来看,iOS,Android 和 Windows Phone 上的移动应用是使用不同的程序语言开发的,iOS 应用使用 Objective-C,Android 应用使用 Java,而 Windows Phone 应用使用 .NET. .随着 JavaScript,CSS 和 HTML 知识技能的提升,相信你也可以构建一个超赞的移动应用.在这篇博客里,我们将会介绍一些极好的 JavaScript 移动应用程序开发框架. 说到网络开发,就不得不说 JavaScript,这是一款很有前途的程序

项目中遇到的问题积累

问题1 问题描述:IE6无法读取外部样式,甚至出现大量bug 问题原因:外部样式文件编码,外部样式中文注释 问题解决:把外部样式文件保存为utf-8,在文件开头添加"@charset "utf-8";",去掉中文注释 项目中遇到的问题积累,布布扣,bubuko.com