2017-02-24 12 views
0

Je ne suis pas capable de créer un dictionnaire dans l'objectif c. Je reçois avertissementImpossible de créer un dictionnaire dans l'objectif c?

entier Incompatible pour envoyer la conversion de pointeur NSInteger au paramètre

Voici mon code.

NSString *tmpSessionID = [[[AppSettings sharedAppSettings] getUserSession] objectForKey:@"UserSessionId"]; 
    int tmpRepoId = [[[[AppSettings sharedAppSettings] getUserRepository] objectForKey:@"RepositoryId" ]intValue]; 
    int tmpUserID = [[[[AppSettings sharedAppSettings] getUserSession] objectForKey:@"UserId"]intValue]; 
    NSDictionary * fmDic = [[AppSettings sharedAppSettings] getFolderModel]; 
    int containerId = containerId = [[fmDic objectForKey:@"ContainerId"]intValue]; 
    int docTypeId = selectedDcoumentType.docTypeId; 
    NSDictionary *metaData = [[NSDictionary alloc] initWithObjectsAndKeys: 
         selectFileIndices.columnId, @"ColumnId", 
         indexValue, @"Value", 
         nil]; 
    NSMutableArray *metaArray = [[NSMutableArray alloc]init]; 
    [metaArray addObject:metaData]; 
    NSDictionary *metaDataFiellds = [[NSDictionary alloc] initWithObjectsAndKeys: 
            metaArray, @"metaDataFields", 
            nil]; 

    NSDictionary *allImportDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
          containerId, @"containerId", 
          docTypeId, @"docTypeId",selectFileIndices.transText, @"fileExt",metaDataFiellds, @"metaDataFields",tmpRepoId, @"repositoryId",1, @"pagesCount", 
           tmpSessionID, @"sessionId", @"1487918350642.jpg", @"title",guid, @"tmpFileName",tmpUserID, @"userId", 
          nil]; 
    NSLog(@"dictionary is %@",allImportDict); 

Je veux créer un JSON comme ci-dessous:

{ 
    "containerId": 2, 
    "docTypeId": 1, 
    "fileExt": ".jpg", 
    "metaDataFields": [ 
    { 
     "ColumnId": 1, 
     "Value": "23" 
    } 
    ], 
    "pagesCount": 1, 
    "repositoryId": 1, 
    "sessionId": "1587c3c9-f261-4749-ace4-c134d031ec38", 
    "title": "1487918350642.jpg", 
    "tmpFileName": "5f8a0340-bd65-476c-b377-67fa19121203", 
    "userId": 5 
} 
+1

quelle ligne vous avez l'erreur – iOS

+4

NSDictionary ne peut pas stocker de valeurs scalaires (comme BOOL, NSInteger, etc.), il ne peut stocker que des objets. Vous devez envelopper vos valeurs scalaires dans NSNumber pour les stocker: [NSNumber numberWithInteger containerId] – iOS

+0

Vous savez que personne n'écrit Objective-C comme ça de nos jours. Avez-vous entendu parler des littéraux de dictionnaire ou de l'accès aux indices? – deadbeef

Répondre

1

NSDictionary accepte des objets uniquement, aucun type de base. Vous aurez besoin d'envelopper votre int l'intérieur d'un NSNumber

[NSNumber numberWithInt:tmpRepoId]

ou, Obj-C moderne:

@(tmpRepoId)

et ajoutez cela au dictionnaire.

En général, je voudrais recommander d'utiliser Obj-C moderne pour une meilleure lisibilité, .: par exemple

int containerId fmDic[@"ContainerId"].intValue; 
NSDictionary *metaDataFiellds = @{ @"metaDataFields" : metaArray }; 

Pensez également à utiliser NSInteger au lieu de int.