2013-08-29 89 views
0

我用Restkit 0.20(第一次),用於經由JSON張貼對象一個Rails服務器,我已經卡住用於與一個惱人的映射誤差的最後幾天。有2個對象圖片和項目。Restkit 0.20的keyPath錯誤1001

Picture 
{ 
"base64" : null, 
"id" : 1, 
"created_at" : "2013-08-28T15:08:49Z", 
"user_nickname" : "user_name", 
"tag" : "ALPHA", 
"nbitems" : null, 
"path" : { 
    "url" : "https://www.mywebsite/pictures/1/default.jpg" 
}, 
"updated_at" : "2013-08-28T15:08:49Z", 
"user_id" : 1 
} 


Item 
{ 
"base64" : null, 
"picture_id" : 1, 
"id" : 1, 
"created_at" : "2013-08-28T15:10:54Z", 
"itemurl" : { 
    "url" : "https://www.mywebsite/pictures/1/item1.png" 
}, 
"nickname" : "", 
"user_id" : 1, 
"updated_at" : "2013-08-28T15:10:54Z" 
} 

這是我在AppDelegate.m

//Mapping users 
RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([User class]) inManagedObjectStore:manager.managedObjectStore]; 
[userMapping addAttributeMappingsFromDictionary:@{ 
@"id" : @"user_id", 
@"email" : @"email", 
@"nickname" : @"nickname", 
@"created_at" : @"createdAt" 
}]; 
userMapping.identificationAttributes = @[ @"user_id" ]; 


//Mapping paths 
RKEntityMapping *pathMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([Path class]) inManagedObjectStore:manager.managedObjectStore]; 
[pathMapping addAttributeMappingsFromDictionary:@{ 
@"url" : @"url" 
}]; 

//Mapping itemURL 
RKEntityMapping *itemURLMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([ItemURL class]) inManagedObjectStore:manager.managedObjectStore]; 
[pathMapping addAttributeMappingsFromDictionary:@{ 
@"url" : @"url" 
}]; 


//Mapping pictures 
RKEntityMapping *pictureMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([Picture class]) inManagedObjectStore:managedObjectStore]; 
[pictureMapping addAttributeMappingsFromDictionary:@{ 
@"id" : @"picture_id", 
@"user_id" : @"user_id", 
@"user_nickname" : @"user_nickname", 
@"nbitems" : @"nbitems", 
@"tag" : @"tag", 
@"base64" : @"base64", 
@"created_at" : @"createdAt" 
}]; 
pictureMapping.identificationAttributes = @[ @"picture_id"]; 
[pictureMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"path" toKeyPath:@"path" withMapping:pathMapping]]; 

[manager addResponseDescriptorsFromArray:@[ 
[RKResponseDescriptor responseDescriptorWithMapping:pictureMapping 
             pathPattern:@"pictures" 
             keyPath:nil 
             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)] 
]]; 

RKObjectMapping *pictureRequestMapping = [RKObjectMapping requestMapping]; 
[pictureRequestMapping addAttributeMappingsFromArray:@[@"user_id", @"user_nickname", @"tag", @"base64", @"path"]]; 
RKRequestDescriptor *pictureRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:pictureRequestMapping objectClass:[Picture class] rootKeyPath:@"picture" method:RKRequestMethodAny]; 
[manager addRequestDescriptor:pictureRequestDescriptor]; 


//Mapping items 
RKEntityMapping *itemMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([Item class]) inManagedObjectStore:managedObjectStore]; 
itemMapping.identificationAttributes = @[ @"item_id"]; 
[itemMapping addAttributeMappingsFromDictionary:@{ 
@"id" : @"item_id", 
@"picture_id" : @"picture_id", 
@"user_id" : @"user_id", 
@"nickname" : @"nickname", 
@"base64" : @"base64", 
@"created_at" : @"createdAt" 
}]; 
RKRelationshipMapping *itemURLRelation = [RKRelationshipMapping relationshipMappingFromKeyPath:@"itemurl" toKeyPath:@"itemurl" withMapping:itemURLMapping]; 
[itemMapping addPropertyMapping:itemURLRelation]; 

RKResponseDescriptor *itemDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:itemMapping 
             pathPattern:@"items" 
              keyPath:nil 
             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
[manager addResponseDescriptor:itemDescriptor]; 

RKObjectMapping *itemRequestMapping = [RKObjectMapping requestMapping]; 
[itemRequestMapping addAttributeMappingsFromArray:@[@"picture_id", @"user_id", @"nickname", @"base64", @"itemurl"]]; 
RKRequestDescriptor *itemRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:itemRequestMapping objectClass:[Item class] rootKeyPath:@"item" method:RKRequestMethodAny]; 
[manager addRequestDescriptor:itemRequestDescriptor]; 

我在一個視圖控制器發佈圖片映射表以及它完美

- (void)uploadPicture:(UIImage *)chosenImage{ 
    NSManagedObjectContext *moc = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
UIImage *resizedImage = [self scaleImage:chosenImage maxWidth:640 maxHeight:960]; 
NSString *imageEncoded = [self image2jpg2String:resizedImage]; 

Picture *picture = [Picture insertInManagedObjectContext:moc]; 
picture.user_id = userId; 
picture.user_nickname = @"user_nickname"; 
picture.tag = @"ALPHA"; 
picture.base64 = imageEncoded; 

[[RKObjectManager sharedManager] postObject:picture path:@"pictures" parameters:nil success:nil failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Error: %@",error);}]; 
    } 

我嘗試做相同的一個項目比如在另一個控制器

- (void)uploadItem{ 
    NSManagedObjectContext *mocFVC = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
NSNumber *userId = [NSNumber numberWithInt:1]; 
UIImage *itemImage = self.itemImage.image; 
UIImage *resizedItem = [self scaleImage:itemImage maxWidth:640 maxHeight:960]; 
NSString *itemEncoded = [self image2png2String:resizedItem]; 

Item *item = [Item insertInManagedObjectContext:mocFVC]; 
item.user_id = userId; 
item.nickname = @"user_nickname"; 
item.picture_id = pictureToDisplay.picture_id; 
item.base64 = itemEncoded; 

[[RKObjectManager sharedManager] postObject:item path:@"items" parameters:nil success:nil failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Error: %@",error);}];  
    } 

但除非我的評論的item.base64,Xcode中總是返回

2013-08-28 22:51:41.116 MYPROJECT[4588:1603] E restkit.network:RKObjectRequestOperation.m:243 POST 'http://www.mywebsite/items' (422 Unprocessable Entity/0 objects) [request=0.6791s mapping=0.0000s total=0.7111s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No mappable object representations were found at the key paths searched." 
    UserInfo=0x1e8af330 {DetailedErrors=(), NSLocalizedFailureReason=The mapping operation was unable to find any nested object representations at the key paths searched: error 
    The representation inputted to the mapper was found to contain nested object representations at the following key paths: itemurl 

    This likely indicates that you have misconfigured the key paths for your mappings., NSLocalizedDescription=No mappable object representations were found at the key paths searched., keyPath=null} 

    2013-08-28 22:51:41.119 MYPROJECT[4588:907] Error: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No mappable object representations were found at the key paths searched." UserInfo=0x1e8af330 {DetailedErrors=(), NSLocalizedFailureReason=The mapping operation was unable to find any nested object representations at the key paths searched: error 

    The representation inputted to the mapper was found to contain nested object representations at the following key paths: itemurl 

    This likely indicates that you have misconfigured the key paths for your mappings., NSLocalizedDescription=No mappable object representations were found at the key paths searched., keyPath=null} 

我查了很多職位上的計算器和發佈前閱讀restkit文檔,但不明白爲什麼它沒有下面的錯誤爲我的項目工作,因爲它的代碼和圖片模型非常接近我用於我的項目類。我錯過了什麼嗎?任何想法 ? :)

+0

你檢查什麼是真正打線和服務器上發生了什麼數據?你看到的消息表明服務器正在拋出一個錯誤。 – Wain

回答

0

@所見日誌沒有顯示任何東西

原來Restkit部分是正確的。該錯誤發生在我的base64 /上傳功能模型中。

def base64=(data) 
# decode data and create stream on them 
filename = "#{self.user_id}.png" 
io = CarrierStringIO.new(filename, Base64.decode64(data)) 

# this will do the thing (photo is mounted carrierwave uploader) 
self.path = io 
end 

文件名行在Web瀏覽器中工作,但不使用JSON。 #weird 不得不改變文件的路徑,以保持作爲USER_ID