菜鸟教程小白 发表于 2022-12-12 22:39:26

ios - 从 json 输出为类实例赋值


                                            <p><p>我正在编写一个代码来创建一个应用程序,其中一组问题及其选项和答案正在通过 json 解析获取。我在 viewDidLoad 方法中做这一切。</p>

<p>这是目前为止的代码。解析代码工作正常。</p>

<pre><code>- (void)viewDidLoad {
;
question *quest = [ init];
//Parsing code

NSMutableURLRequest *request = [ init];
];
;
NSURLSession *session = ];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data , NSURLResponse *response , NSError *error){
    NSError *err = nil;
    id jsonData = ;
    if (err) {
      ;
    }
    else {

//Unclear from here   


      NSLog(@&#34;%@&#34;, jsonData[@&#34;data&#34;]);
      allData = jsonData[@&#34;data&#34;];
      NSLog(@&#34;%lu&#34;,(unsigned long)allData.count);
      int count = allData.count;
      int i = 0;
      while (i &lt; count){
            question *que;
            NSString *q,*a,*o1,*o2,*o3,*o4;
            a = ;
            q = ;
            o1 = ;
            o2 = ;
            o3 = ;
            o4 = ;

            //NSLog(@&#34;%@&#34;, );
            ;
            ;
            ;
            ;
            ;
            ;
            i++;

            NSLog(@&#34;%@&#34;,);
      }

    }
}] resume];
</code></pre>

<p>}</p>

<p><code>NSLog(@"%@", jsonData[@"data"]);</code> 代码的输出如下所示。</p>

<pre><code>{
      answer = sometext;
      id = 7;
      option1 = sometext;
      option2 = sometext;
      option3 = sometext;
      option4 = sometext;
      question = &#34;sometext&#34;;
    },         
      {
      answer = sometext;
      id = 9;
      option1 = sometext;
      option2 = sometext;
      option3 = sometext;
      option4 = sometext;
      question = &#34;sometext&#34;;
    }
)
</code></pre>

<p>据我了解,这个 json 数据是一个字典数组(?)</p>

<p>我要做的下一步是创建一个“问题”类。我不确定我是否做得对,但这是代码:</p>

<pre><code>#import &#34;question.h&#34;
@implementation question {   
NSString *q;
NSString *a;
NSString *o1;
NSString *o2;
NSString *o3;
NSString *o4;      
}
@end
</code></pre>

<p>在 <code>viewDidLoad</code> 方法的 while 循环中,我正在尝试创建名为 <code>que</code> 的 <code>question</code> 类的实例如代码所示填充。
但是 <code>NSLog(@"%@",);</code> 行在控制台中给出了 <code>null</code>。</p>

<p>我确定我使用的方法一定有问题。</p>

<p>第二个问题是我正在创建一个名为 <code>quest</code> 的 <code>question</code> 数组,我在 <code>viewDidLoad</code> 之后声明了它。但是我将无法在任何其他代码块中使用它,例如按钮的单击事件。如果我尝试在 <code>viewDidLoad</code> 上方使用 <code>question *quest = [ init];</code> 行,则会出现错误:</p>

<p><code>initialiser 元素不是编译时常量</code></p>

<p>我知道这不是理想的编码方式,但我仍然是这里的初学者,只是对所有这些新概念感到困惑。我在 Swift 中开发了相同的应用程序,但 Objective C 感觉太难了。
任何帮助将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>为了得到你想要的,首先你必须创建一个 NSMutableArray 来存储 Question 类的实例,你必须像这样将它声明为一个全局数组</p>

<pre><code>@interface MyClass (){
    NSMutableArray * arrQuestion;
}
</code></pre>

<p>现在,在 question.h 中,您必须为所有像这样的变量声明 <code>@property</code>,问题类也将从 NSObject 派生,因为您将其创建为 <code>型号</code>类</p>

<pre><code>@interface question : NSObject
@property (nonatomic, strong) NSString *strQuestion;
@property (nonatomic, strong) NSString * strAnswer;
@property (nonatomic, strong) NSString * strOptionA;
@property (nonatomic, strong) NSString * strOptionB;
@property (nonatomic, strong) NSString * strOptionC;
@property (nonatomic, strong) NSString * strOptionD;
@end
</code></pre>

<p>现在在 while 循环中,您必须创建 Question 类的新实例,并且必须像这样在其中分配值</p>

<pre><code>arrQuestion = ;
while (i &lt; count){
      question *quest = [ init];
      quest.strQuestion = [[objectAtIndex:i] objectForKey:@&#34;question&#34;];
      quest.strAnswer = [[objectAtIndex:i] objectForKey:@&#34;answer&#34;];
      quest.strOptionA = [[objectAtIndex:i] objectForKey:@&#34;option1&#34;];
      quest.strOptionB = [[objectAtIndex:i] objectForKey:@&#34;option2&#34;];
      quest.strOptionC = [[objectAtIndex:i] objectForKey:@&#34;option3&#34;];
      quest.strOptionD = [[objectAtIndex:i] objectForKey:@&#34;option4&#34;];
      i++;
      ;
}
</code></pre>

<p>现在从 <code>arrQuestion</code> 你可以访问像这样的值</p>

<pre><code>question *quest = ; //For Example value at 0 index
NSLog(@&#34;Value of first question - %@&#34;, quest. strQuestion);
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从 json 输出为类实例赋值,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/40211064/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/40211064/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从 json 输出为类实例赋值