【问题标题】:How to Show a String instead of address in textView如何在 textView 中显示字符串而不是地址
【发布时间】:2012-12-26 11:02:09
【问题描述】:

我正在尝试从数据库中获取一个随机字符串,我尝试将数组转换为字符串,但是当我单击按钮时,我只能获得地址,谁能帮助我如何在按钮操作中显示该字符串?

- (IBAction)randBtn:(id)sender {

        SendQuoteVC *svc= [[SendQuoteVC alloc]initWithNibName:@"SendQuoteVC" bundle:nil];

        DBHandler *db =[[DBHandler alloc]init];
        arr =[db randomQuote];

        NSMutableString * show = [[NSMutableString alloc] init];
        for (NSObject * obj in arr)
        {
            [show appendString:[obj description]];
        }
        NSLog(@"The concatenated string is %@", show);

        NSString *rs =[NSString stringWithFormat:@" %@",show];
        svc.quote=rs;
      [self.navigationController pushViewController:svc animated:YES];
}

我的日志消息是

    2012-12-26 17:02:46.062 SendQuote[2281:c07] QUERY: SELECT * FROM quotes ORDER BY RANDOM() LIMIT 1
2012-12-26 17:02:46.097 SendQuote[2281:c07] txtQuote is  (
    "<quoteDC: 0xa9a94c0>"
)
2012-12-26 17:02:46.100 SendQuote[2281:c07] rand is  (
    "<quoteDC: 0xa9a94c0>"
)

我已将我的用户实体类更改为 quoteDC 类,我的 Db 函数是

-(NSMutableArray *)randomQuote{
    NSMutableArray *dataArray =[[NSMutableArray alloc]init];
    NSString * sqlStr=[NSString stringWithFormat:@"SELECT * FROM quotes ORDER BY RANDOM() LIMIT 1"];
    sqlite3_stmt *ReturnStatement = (sqlite3_stmt *) [self getStatement: sqlStr];
    while (sqlite3_step(ReturnStatement)==SQLITE_ROW)
    {
        @try
        {
            quoteDC *worddc = [[quoteDC alloc] init];

            NSString *userid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(ReturnStatement, 0)];
            NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(ReturnStatement, 1)];


            worddc.quote_id=[userid integerValue];
            worddc.quotes=name;
            [dataArray addObject:worddc];
        }
        @catch (NSException *ept) {
            NSLog(@"Exception in %s, Reason: %@", __PRETTY_FUNCTION__, [ept reason]);
        }
    }
    return dataArray;


}

【问题讨论】:

  • 您如何存储从数据库中检索到的值?您是否使用任何实体类的对象?
  • 是的。我正在使用实体类..
  • 如果您粘贴您的数据库方法,那么我们将提供更准确的答案
  • 我编辑了我的问题并更改了我的实体类

标签: iphone ios xcode arrays memory-management


【解决方案1】:

[db randomQuote] 方法返回一个用户数组而不是字符串,您可以将其类型转换为用户对象,而不是从中获取您想要的属性!

【讨论】:

    【解决方案2】:

    您的数组似乎是某个 user 类的对象数组,而不是字符串数组。 因此调用

    [obj description]
    

    返回的是一个对象而不是一个字符串。

    您需要覆盖 user 类中的描述方法,并返回字符串。

    【讨论】:

      【解决方案3】:

      试试这个,我认为它对你有用...

          - (IBAction)randBtn:(id)sender {
      
          SendQuoteVC *svc= [[SendQuoteVC alloc]initWithNibName:@"SendQuoteVC" bundle:nil];
      
          DBHandler *db =[[DBHandler alloc]init];
          arr =[db randomQuote];
          NSString *rs =(NSString *)arr;
          svc.quote=rs;
          [self.navigationController pushViewController:svc animated:YES];
         }
      

      【讨论】:

      • type cast arr as (nsstring *)arr in this line NSString *rs =[NSString stringWithFormat:@" %@",arr];
      【解决方案4】:

      此代码导致问题:

      for (NSObject * obj in arr)
      {
          [show appendString:[obj description]];
      }
      

      因为您的实体类没有description 之类的属性。 而不是这样写:

      for (quoteDC * obj in arr)
      {
          [show appendString:[obj quotes]];
      }
      

      【讨论】:

      • @QualityCoder:很高兴:)
      【解决方案5】:

      使用存储在arr 中的对象代替for (NSObject * obj in arr)

      我猜它是一些 DBHandler 对象。所以用

      for (DBHandler * dbh in arr){
          [show appendString:[dbh thePropertyYouWantToAppend]];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        • 2015-12-29
        相关资源
        最近更新 更多