2017-04-05 11 views
0

アバター用のリモートイメージをロードしようとすると、自分のイメージにnilを指定できないというエラーが表示され、アプリケーションがクラッシュします。私は単にアプリが成功ログに取得する前にクラッシュさリモートイメージのロード中にJSQMessagesAvatarImageFactoryが破損しています

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.inputToolbar.contentView.textView.pasteDelegate = self; 
    self.userAvatarDictionary = [[NSMutableDictionary alloc] init]; 
    self.latestGuid = @""; 

    /** 
    * Load up our fake data for the demo 
    */ 
    self.demoData = [[DemoModelData alloc] init]; 

    /** 
    * You can set custom avatar sizes 
    */ 

    self.collectionView.collectionViewLayout.incomingAvatarViewSize = CGSizeMake(30, 30); 

    self.collectionView.collectionViewLayout.outgoingAvatarViewSize = CGSizeZero; 

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage jsq_defaultTypingIndicatorImage] 
                       style:UIBarButtonItemStylePlain 
                      target:self 
                      action:@selector(receiveMessagePressed:)]; 


    //Load remote image for Gibson Les Paul Guitar as test 
    NSString *imgURLString = @"http://images.gibson.com/Products/Electric-Guitars/Les-Paul/Gibson-USA/Les-Paul-Studio/Splash-02.jpg"; 

    NSURL *url = [NSURL URLWithString:imgURLString]; 
    NSLog(@"CREATED USER ID: 13"); 
    NSLog(@"CREATOR IMAGE URL: %@", imgURLString); 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    UIImage *dataLoadedImg = [UIImage imageWithData:data]; 


    JSQMessagesAvatarImage *img = [JSQMessagesAvatarImageFactory avatarImageWithImage:dataLoadedImg diameter:20.0f]; 

    [self.userAvatarDictionary setObject:img forKey:@"13"]; 
    NSLog(@"ADDED GIBSON ICON SUCCESSFULLY"); 
    [self callViewMessagesListWithLatestMessageGuid:self.latestGuid 
            CompletionBlock:^(NSMutableArray *resultsArray) { 
             [self reloadData:resultsArray]; 
            }]; 
    [NSTimer scheduledTimerWithTimeInterval:15.0 target:self selector:@selector(fifteenSecondsPassed:) userInfo:nil repeats:YES]; 
} 

を当分の間、私のviewDidLoadメソッドでアバターの作成を追加していて、明らかにメッセージの負荷Webサービスが呼び出され取得されていません。

Logging/Error messaging: 

CREATED USER ID: 13 
CREATOR IMAGE URL: http://images.gibson.com/Products/Electric-Guitars/Les-Paul/Gibson-USA/Les-Paul-Studio/Splash-02.jpg 

*** Assertion failure in +[JSQMessagesAvatarImageFactory jsq_circularImage:withDiameter:highlightedColor:], /Users/propstm/Documents/Github/MyProject/Pods/JSQMessagesViewController/JSQMessagesViewController/Factories/JSQMessagesAvatarImageFactory.m:132 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: image != nil' 

答えて

1

これは、画像が表示されないときに読み込まれたためです。これは、イメージを元に戻すことができるまで、デフォルトのイメージを使用することで解決できます。最初に使用する既定の空白のアバターを提供するためのメソッドを作成し、要求が返されてそのセルのアバターを更新する場合は、メソッドを作成できます。あなたが会話の中でユーザー辞書を作成し、あなたは一度だけの要求をする必要があるとのためにその辞書から引き出すことができます彼らのために、リモートの画像を取得し、この辞書に保存した場合、最適化なども

func getBlankAvatar() -> UIImage { 
    let blankAvatar = JSQMessagesAvatarImageFactory.avatarImageWithUserInitials("?", backgroundColor: .gray, textColor: .white, font: UIFont.systemFontOfSize(14), diameter: UInt(kJSQMessagesCollectionViewAvatarSizeDefault)) 

あなたの個々のメッセージセル。

0

あなたは、あなたがそれを使用する前に、あなたのイメージをダウンロードする必要があります。 SDWebImageを使用して、Web画像のすべての操作を処理できます。 SDWebImageをcocoapodsでインストールしてから、次のコードを追加してください。

[[SDWebImageManager sharedManager] downloadImageWithURL:imgURLString 
               options:0 
              progress:nil 
              completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
    if (!error && finished && image) { 
    [self.userAvatarDictionary setObject:image forKey:@"13"]; 
    NSLog(@"ADDED GIBSON ICON SUCCESSFULLY"); 
    [self.collectionView reloadData]; 
    } 
}]; 
関連する問題