0

データベースからランダムな文字列を取得しようとしています。配列を文字列に変換しようとしましたが、ボタンをクリックするとアドレスしか取得できません。ボタンアクションでその文字列を表示する方法を教えてください。

- (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;


}
4

5 に答える 5

3

[db randomQuote] メソッドは、文字列ではなくユーザーの配列を返します。目的のプロパティを取得するよりも、それをユーザー オブジェクトに型キャストできます。

于 2012-12-26T11:10:13.093 に答える
2

これを試してみてください...

    - (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];
   }
于 2012-12-26T11:06:06.430 に答える
2

あなたの配列は、user文字列の配列ではなく、あるクラスのオブジェクトの配列のようです。したがって、への呼び出し

[obj description]

文字列ではなくオブジェクトを返しています。

userクラスの説明メソッドをオーバーライドし、文字列を返す必要があります。

于 2012-12-26T11:10:27.913 に答える
1

このコードは問題を引き起こします:

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

エンティティ クラスには のようなプロパティがないためdescriptionです。この書き込みの代わりに:

for (quoteDC * obj in arr)
{
    [show appendString:[obj quotes]];
}
于 2012-12-26T12:09:51.443 に答える
0

for (NSObject * obj in arr)に格納されているオブジェクトを使用する代わりにarr

DBHandlerオブジェクトだと思います。だから使用する

for (DBHandler * dbh in arr){
    [show appendString:[dbh thePropertyYouWantToAppend]];
}
于 2012-12-26T11:18:01.657 に答える