标签: jsonmodel

如何使用JSONModel将NSArray序列化为JSON

奇怪的是,似乎没有任何公共方法来序列化数组,但它显然可以在序列化数组属性时执行.我有一个带有数组属性的JSONModel继承类.我想获得该属性的JSON文本表示,而不是整个对象.

我不介意修改源代码,但是首先要了解哪些内容.

另一个想法是将每个对象单独序列化为JSON并将它们包装在中[,].

objective-c nsarray jsonmodel

2
推荐指数
1
解决办法
5966
查看次数

JSONModel返回nil

我正在使用JSONModel从URL获取JSON.这是一个非常简单的对象,只包含2个字符串 - "name"和"url".

首先我制作了对象模型:

@protocol
Tutorial
@end
@interface Tutorial : JSONModel
@property (nonatomic, strong)   NSString *name;
@property (nonatomic, strong)   NSString *url;
@end
Run Code Online (Sandbox Code Playgroud)

然后对象Feed:

#import "JSONModel.h"
#import "Tutorial.h"
@interface TutorialFeed : JSONModel
@property (nonatomic, strong)   NSArray <Tutorial> *tutorials;
@end
Run Code Online (Sandbox Code Playgroud)

然后在MasterViewController.m中:

#import "MasterViewController.h"
#import "DetailViewController.h"
#import "TutorialFeed.h"
#import "JSONModelLib.h"

@interface MasterViewController () {
  TutorialFeed *feed;
  TutorialFeed *testFeed;
}
@end
@implementation MasterViewController
-(void)viewDidAppear:(BOOL)animated
{
    feed = [[TutorialFeed alloc]

initFromURLWithString:@"http://api.matematikfessor.dk/apps/teacher_videos"
       completion:^(JSONModel *model, JSONModelError *err) {
           NSLog(@"Tutorials %@", feed.tutorials);
       }];
 }
 @end
Run Code Online (Sandbox Code Playgroud)

问题是,我在日志中返回nil :(我不知道为什么会发生这种情况,因为我设法从这个URL获取JSON数据: Kiwa …

json objective-c nsarray jsonmodel

2
推荐指数
1
解决办法
3323
查看次数

JSONModel:填充泛型类型的NSArray

我在我的iOS应用程序中使用JSONModel,我正面临一些警告,让我自己解释一下.

假设我有这个JSONModel

CTVContact.h

@interface CTVContact : JSONModel
@property (nonatomic, strong) NSArray<Optional, CTVPhone> *phone;
@end
Run Code Online (Sandbox Code Playgroud)

CTVContact.m

NSMutableArray *phones = [[NSMutableArray alloc] init];
for(NSString *p in personPhones) {
    CTVPhone *phn = [[CTVPhone alloc] init];
    phn.original = p;
    [phones addObject:phn];
}    
phone = [NSArray arrayWithArray:phones];
Run Code Online (Sandbox Code Playgroud)

基本上它都像一个魅力,但我得到一个警告,说明以下内容:

Incompatible pointer types assigning to 'NSArray<Optional,CTVEventParticipant> *' from 'NSArray *'
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过那个警告?在没有该警告的情况下,我找不到将所有数组值分配给手机阵列的正确方法.

非常感谢提前!

objective-c ios objc-protocol jsonmodel

2
推荐指数
1
解决办法
2642
查看次数

不明白为什么我的NSString数据为空

不明白为什么我的NSString数据为空.

我试图从我的应用程序解析json网站上的数字字符串.它成功运行,但是当我试图在我的视图控制器中显示该数字时,它读取为null.我将发布一个示例代码供大家更好地理解.

Handler.m

JsonModel *jsonModel =[[JsonModel alloc]init];
jsonModel.idNumber = [jsonDict valueForKey:@"id"];
nslog(@"%@",jsonModel.idNumber);
Run Code Online (Sandbox Code Playgroud)

JsonModel.h

 #import <Foundation/Foundation.h>

 @interface JsonModelModel : NSObject

 @property (nonatomic, strong) NSString *idNumber;
Run Code Online (Sandbox Code Playgroud)

JsonModel.m

#import "JsonModel.h"

@implementation JsonModel
@synthesize idNumber;
Run Code Online (Sandbox Code Playgroud)

这部分工作成功,我能够解析必要的数据并NSLog证明它.但是,这就出现了问题.PS idNumber是NSString.

ViewController.m

-(void)method{
JsonModel *jsonModel =[[JsonModel alloc]init];
NSLog(@"%@",jsonModel.idNumber);
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,NSLog显示为null.即使首先解析了json数据,然后调用视图控制器中的方法.我必须缺少一些小细节.如果有人帮我搞清楚,我会很感激.

cocoa-touch objective-c nsstring ios jsonmodel

1
推荐指数
1
解决办法
118
查看次数

如何使用AnyClass对象中定义的类型在Swift中声明变量?

在我的旧Obj-C代码中,我可以声明一个字典,其值是Class其他类的类型

NSMutableDictionary *Methods = [[NSMutableDictionary alloc] init];
[Methods setObject:[AuthReturnValue class] forKey:@"Authenticate"];
[Methods setObject:[MyOptions class] forKey:@"GetOptions"];
Run Code Online (Sandbox Code Playgroud)

之后,基于密钥,我可以将其分配Class给另一个变量

(在标题中)

Class returnType;
Run Code Online (Sandbox Code Playgroud)

(在实施中):

returnType = (Class)[Methods objectForKey:methodName];
Run Code Online (Sandbox Code Playgroud)

然后我可以使用这个Class变量声明一个相同类型的新变量(在这种情况下,它使用JSONModel并使用NSDictionary其他地方初始化它)

id<NSObject> result;
result = [[returnType alloc] initWithDictionary:(NSDictionary *)responseObject error:NULL];
Run Code Online (Sandbox Code Playgroud)

这很好,很方便,因为JSONModel实现了initWithDictionary,这意味着我可以通过Class这种方式拉入,而无需实例化特定类型.

我无法弄清楚如何在Swift中做到这一点.

例如,这不起作用:

var result: self.returnType.self()
var result: AnyClass = self.returnType.self
Run Code Online (Sandbox Code Playgroud)

还有几十个变种.

如何将Swift中的变量声明为对象中的class定义AnyClass?或者我这样做是错的?

objective-c type-conversion jsonmodel swift

1
推荐指数
1
解决办法
2601
查看次数

我如何使用协议分配NSMutableArray?

这是一个新手问题.我有一个看起来像下面的对象(例如MyObject.h).

#import <Foundation/Foundation.h>
#import "JSONModel.h"
@protocol MyObject
@end
@interface MyObject : JSONModel
@property (strong,nonatomic) NSString* name;
@end
Run Code Online (Sandbox Code Playgroud)

实现如下(例如MyObject.m).

#import "MyObject.h"
@implementation MyObject
@end
Run Code Online (Sandbox Code Playgroud)

在我的其他地方的代码中,我然后定义NSMutableArray如下.

NSMutableArray<MyObject>* list;
list = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

我收到了这个警告.

不兼容的指针类型从'NSMutableArray ' 分配'NSMutableArray <MyObject> '

我知道泛型不支持Objective-C开箱即用(这也不是我在这里要做的),但我NSMutableArray的定义是这样的协议,MyObject因为我试图关注"JSONModel"的GitHub页面中的示例.

代码仍在编译,但上面有警告.我如何能

  • 使警告消失,或
  • NSMutableArray正确分配/初始化?

更新:

我继续搜索如何摆脱这个警告,事实证明,如果我创建一个NSMutableArray像下面这样的警告消失(并且项目编译没有错误).我将编写一个单元测试,看它是否按预期工作.

list = (id)[NSMutableArray new];
Run Code Online (Sandbox Code Playgroud)

objective-c ios jsonmodel

0
推荐指数
1
解决办法
729
查看次数