一、数据模型
@interface SSTEditTaskSujectFinishedPictureModel:NSObject
@property (nonatomic,copy) NSString *uploadDate;
@property (nonatomic,copy) NSString *course;
@property (nonatomic,copy) NSString *vipId;
@property (nonatomic,copy) NSString *studentName;
@property (nonatomic,copy) NSString *homeworkPictureId;
@property (nonatomic,copy) NSString *derverFileId;
@property (nonatomic,copy) NSString *timestampStr;
@property (nonatomic,copy) NSString *image;
@property (nonatomic,copy) NSString *originImageUrl;
@property (nonatomic,copy) NSString *originPictureUrl;
@property (nonatomic,assign) SSTHomeworkPictureState correctStatus;
@property (nonatomic,copy) NSString *localPath;
@property (nonatomic,strong) UIImage *localImage;
@property (nonatomic,assign)BOOL isLocalData;
@property (nonatomic,assign)int index;
@property (nonatomic,copy) NSString *questionRecommendRecordId;
@end
二、本地数据管理
#import "DataBaseHelper.h"
#import "SSTEditTaskModel.h"
#define kHOMEWORKImage_TABLE_NAME @"HomeworkImageTable"
NS_ASSUME_NONNULL_BEGIN
@interface DataBaseHelper (ImageUpload)
-(void)creatHomeworkImageInfoTable;
-(BOOL)saveHomeworkImageInfo:(SSTEditTaskSujectFinishedPictureModel *)imageModel;
-(NSArray <SSTEditTaskSujectFinishedPictureModel *>*)getAllHomeworkImageModel;
-(BOOL)deleteHomeworkImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel;
-(BOOL)deleteHomeworkImageModelBeforeDate:(NSString *)date;
-(BOOL)updateImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel withImageModelKey:(NSString *)key andImageModelValue:(NSString *)value;
@end
NS_ASSUME_NONNULL_END
@implementation DataBaseHelper (ImageUpload)
-(NSArray *)obtainTaskImageInfoTableField {
NSArray *array = @[@"uploadDate",@"vipId",@"studentName",@"course",@"derverFileId",@"localPath",@"correctStatus",@"timestampStr"]
return array
}
/**
* 创建作业图片的表
*/
-(void)creatHomeworkImageInfoTable{
[[DataBaseHelper sharedInstance] DatabaseWithDBName:kHOMEWORKImage_TABLE_NAME]
NSDictionary *dict = @{@"uploadDate":@(DBdatatypeNSString),
@"vipId":@(DBdatatypeNSString),
@"studentName":@(DBdatatypeNSString),
@"course":@(DBdatatypeNSString),
@"derverFileId":@(DBdatatypeNSString),
@"localPath":@(DBdatatypeNSString),
@"timestampStr":@(DBdatatypeNSString),
@"correctStatus":@(DBdatatypeInteger)}
[self createTable:kHOMEWORKImage_TABLE_NAME WithKey:dict]
}
/**
*保存作业图片信息
*/
-(BOOL)saveHomeworkImageInfo:(SSTEditTaskSujectFinishedPictureModel *)imageModel {
NSDictionary *dict = @{@"uploadDate":imageModel.uploadDate,
@"vipId":imageModel.vipId,
@"studentName":imageModel.studentName,
@"course":imageModel.course,
@"derverFileId":imageModel.derverFileId,
@"localPath":imageModel.localPath,
@"timestampStr":imageModel.timestampStr,
@"correctStatus":@(imageModel.correctStatus)}
BOOL insert = [self insertInTable:kHOMEWORKImage_TABLE_NAME WithKey:dict]
SSLog(@"%@-%@图片数据保存%@",imageModel.uploadDate,imageModel.studentName,insert?@"成功":@"失败")
if (insert) {
[self saveUploadHomewrokPhoto:imageModel]
}
return insert
}
/**
* 获取所有的作业图片信息
*/
-(NSArray <SSTEditTaskSujectFinishedPictureModel *>*)getAllHomeworkImageModel {
NSMutableArray *tempArray = [[NSMutableArray alloc] init]
NSDictionary *keyDict = @{@"uploadDate":@(DBdatatypeNSString),
@"vipId":@(DBdatatypeNSString),
@"studentName":@(DBdatatypeNSString),
@"course":@(DBdatatypeNSString),
@"derverFileId":@(DBdatatypeNSString),
@"localPath":@(DBdatatypeNSString),
@"timestampStr":@(DBdatatypeNSString),
@"correctStatus":@(DBdatatypeInteger)}
tempArray = [self selectInTable:kHOMEWORKImage_TABLE_NAME WithKey:keyDict orderKey:@"timestampStr" orderModel:@"DESC"]
NSMutableArray *nodeArr = [NSMutableArray array]
for (NSDictionary *nodeDict in tempArray) {
SSTEditTaskSujectFinishedPictureModel *voice = [[SSTEditTaskSujectFinishedPictureModel alloc] init]
voice.vipId = [nodeDict objectForKey:@"vipId"]
voice.uploadDate = [nodeDict objectForKey:@"uploadDate"]
voice.studentName = [nodeDict objectForKey:@"studentName"]
voice.course = [nodeDict objectForKey:@"course"]
voice.derverFileId = [nodeDict objectForKey:@"derverFileId"]
voice.localPath = [nodeDict objectForKey:@"localPath"]
voice.correctStatus = [[nodeDict objectForKey:@"correctStatus"] integerValue]
voice.localImage = [nodeDict objectForKey:@"localImage"]
voice.timestampStr = [nodeDict objectForKey:@"timestampStr"]
voice.localImage = [self getHomeworkImageWithModel:voice]
[nodeArr addObject:voice]
}
return nodeArr
}
-(NSArray <SSTEditTaskSujectFinishedPictureModel *>*)getAllHomeworkImageModelBeforeDate:(NSString *)beforeDate {
NSMutableArray *tempArray = [[NSMutableArray alloc] init]
NSDictionary *keyDict = @{@"uploadDate":@(DBdatatypeNSString),
@"vipId":@(DBdatatypeNSString),
@"studentName":@(DBdatatypeNSString),
@"course":@(DBdatatypeNSString),
@"derverFileId":@(DBdatatypeNSString),
@"localPath":@(DBdatatypeNSString),
@"timestampStr":@(DBdatatypeNSString),
@"correctStatus":@(DBdatatypeInteger)}
NSString *selectQuery = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE uploadDate < ?",kHOMEWORKImage_TABLE_NAME]
tempArray = [self selectInTable:kHOMEWORKImage_TABLE_NAME withKey:keyDict andQuery:selectQuery whereCondition:beforeDate]
NSMutableArray *nodeArr = [NSMutableArray array]
for (NSDictionary *nodeDict in tempArray) {
SSTEditTaskSujectFinishedPictureModel *voice = [[SSTEditTaskSujectFinishedPictureModel alloc] init]
voice.vipId = [nodeDict objectForKey:@"vipId"]
voice.uploadDate = [nodeDict objectForKey:@"uploadDate"]
voice.studentName = [nodeDict objectForKey:@"studentName"]
voice.course = [nodeDict objectForKey:@"course"]
voice.derverFileId = [nodeDict objectForKey:@"derverFileId"]
voice.localPath = [nodeDict objectForKey:@"localPath"]
voice.correctStatus = [[nodeDict objectForKey:@"correctStatus"] integerValue]
voice.localImage = [nodeDict objectForKey:@"localImage"]
voice.timestampStr = [nodeDict objectForKey:@"timestampStr"]
voice.localImage = [self getHomeworkImageWithModel:voice]
[nodeArr addObject:voice]
}
return nodeArr
}
/**
* 删除作业图片信息
*/
-(BOOL)deleteHomeworkImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel {
BOOL isDelete = [self deleteInTable:kHOMEWORKImage_TABLE_NAME withConditonKey:@"derverFileId" andConditonValue:imageModel.derverFileId]
if (isDelete) {
[self deleteUploadPhoto:imageModel]
}
return isDelete
}
-(BOOL)deleteHomeworkImageModelBeforeDate:(NSString *)date{
BOOL isAllDelete = YES
NSArray *imgModelArr = [self getAllHomeworkImageModelBeforeDate:date]
for (SSTEditTaskSujectFinishedPictureModel *pModel in imgModelArr) {
BOOL isDelete = [self deleteHomeworkImageModel:pModel]
if (!isDelete) {
isAllDelete = NO
}
}
return isAllDelete
}
-(BOOL)updateImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel withImageModelKey:(NSString *)key andImageModelValue:(NSString *)value{
BOOL isUpdate = [self updateInTable:kHOMEWORKImage_TABLE_NAME columnName:key newValue:value whereCondition:@"derverFileId" andConditionValue:imageModel.derverFileId]
return isUpdate
}
-(void)saveUploadHomewrokPhoto:(SSTEditTaskSujectFinishedPictureModel *)uploadImage{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
UIImage *image = uploadImage.localImage
// 本地沙盒目录 + CheckHomewor + [NSDate nowDate]
NSString *imgPath = [SSUtility getUploadHomeworkPhotoDirectoryWithSubject:uploadImage.course withDate:uploadImage.uploadDate vipId:uploadImage.vipId]
NSString *localImagePath = [imgPath stringByAppendingFormat:@"%@",uploadImage.localPath]
// 将取得的图片写入本地的沙盒中,其中0.5表示压缩比例,1表示不压缩,数值越小压缩比例越大
BOOL success = [UIImageJPEGRepresentation(image,1) writeToFile:localImagePath atomically:YES]
if (success){
NSLog(@"上传中的作业写入本地成功")
}
})
}
-(UIImage*)getHomeworkImageWithModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel {
NSString *imgPath = [SSUtility getUploadHomeworkPhotoDirectoryWithSubject:imageModel.course withDate:imageModel.uploadDate vipId:imageModel.vipId]
NSString *localImagePath = [imgPath stringByAppendingFormat:@"%@",imageModel.localPath]
NSData *imgData = [NSData dataWithContentsOfFile:localImagePath]
UIImage *img = [UIImage imageWithData:imgData]
return img
}
/**
* 删除作业图片
*/
-(void)deleteUploadPhoto:(SSTEditTaskSujectFinishedPictureModel *)uploadImage{
// 本地沙盒目录 + CheckHomewor + [NSDate nowDate]
NSString *imgPath = [SSUtility getUploadHomeworkPhotoDirectoryWithSubject:uploadImage.course withDate:uploadImage.uploadDate vipId:uploadImage.vipId]
NSString *localImagePath = [imgPath stringByAppendingFormat:@"%@",uploadImage.localPath]
if ([[NSFileManager defaultManager] removeItemAtPath:localImagePath error:nil]) {
NSLog(@" --- 删除成功 --- %@",uploadImage.derverFileId)
}else {
NSLog(@" --- 删除失败 --- %@",uploadImage.derverFileId)
}
}
@end
三、图片异步上传逻辑
#import <Foundation/Foundation.h>
#import "SSTEditTaskModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface SSImageUploadQueueManager : NSObject
@property (nonatomic, assign) BOOL isUploading;
+ (instancetype)shareManager;
- (void)enqueueImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel;
- (void)reUploadImageModelArr:(NSArray<SSTEditTaskSujectFinishedPictureModel *> *)imageModelArr;
- (void)deleteUpoadImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel;
- (void)setAllUploadImageModelState:(SSTHomeworkPictureState)state;
@end
NS_ASSUME_NONNULL_END
static SSImageUploadQueueManager *_manager = nil
static dispatch_queue_t _queueUploadBegin = nil
static dispatch_semaphore_t _semaphoreBegin = nil
@interface SSImageUploadQueueManager ()<NSCopying,NSMutableCopying>
@property (nonatomic, strong) NSMutableArray *uploadQueue
@end
@implementation SSImageUploadQueueManager
+ (instancetype)shareManager {
return [[self alloc] init]
}
- (instancetype)init {
static dispatch_once_t onceToken
dispatch_once(&onceToken, ^{
_manager = [super init]
_uploadQueue = [NSMutableArray array]
_queueUploadBegin = dispatch_queue_create("com.uploadHomeworkImageToOSS.xiaodiandou.tast", DISPATCH_QUEUE_SERIAL)
_semaphoreBegin = dispatch_semaphore_create(1)
})
return _manager
}
+ (id)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken
dispatch_once(&onceToken, ^{
_manager = [super allocWithZone:zone]
})
return _manager
}
- (nonnull id)copyWithZone:(NSZone *)zone {
return _manager
}
- (nonnull id)mutableCopyWithZone:(NSZone *)zone {
return _manager
}
// 只在拍照的时候,从这里添加;
- (void)enqueueImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel {
[[DataBaseHelper sharedInstance] saveHomeworkImageInfo:imageModel]
[self.uploadQueue addObject:imageModel]
[self startUploadingIfIdle]
}
- (void)reUploadImageModelArr:(NSArray<SSTEditTaskSujectFinishedPictureModel *> *)imageModelArr {
[self.uploadQueue addObjectsFromArray:imageModelArr]
if (self.uploadQueue.count == imageModelArr.count) {
[self uploadNextImageModel]
}
}
- (void)deleteUpoadImageModel:(SSTEditTaskSujectFinishedPictureModel *)imageModel {
// 定义一个标识符来查找的值
NSString *targetIdentifier = imageModel.derverFileId
// 创建NSPredicate对象
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"derverFileId == %@", targetIdentifier]
// 使用NSPredicate过滤NSArray
NSArray *filteredArray = [self.uploadQueue filteredArrayUsingPredicate:predicate]
// 检查是否有匹配的Model对象
if (filteredArray.count > 0) {
// 找到了匹配的Model对象
for (SSTEditTaskSujectFinishedPictureModel *pModel in filteredArray) {
[self.uploadQueue removeObject:pModel]
}
} else {
// 没有找到匹配的Model对象
NSLog(@" -- 没有找到匹配的Model对象 -- ")
}
}
- (void)setAllUploadImageModelState:(SSTHomeworkPictureState)state {
NSArray *uploadImgAllArr = [[DataBaseHelper sharedInstance] getAllHomeworkImageModel]
for (SSTEditTaskSujectFinishedPictureModel *imageModel in uploadImgAllArr) {
[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:[NSString stringWithFormat:@"%ld",state]]
}
}
- (SSTEditTaskSujectFinishedPictureModel *)dequeueImageModel {
SSTEditTaskSujectFinishedPictureModel *imageModel = [self.uploadQueue firstObject]
if (imageModel) {
[self.uploadQueue removeObjectAtIndex:0]
}
return imageModel
}
- (void)startUploadingIfIdle {
if (self.uploadQueue.count == 1) {
[self uploadNextImageModel]
}
}
- (void)uploadNextImageModel {
SSTEditTaskSujectFinishedPictureModel *imageModel = [self dequeueImageModel]
if (imageModel) {
// 执行上传操作,可以使用网络请求库(如NSURLSession)将图片上传到服务器
// 在上传完成后的回调中,调用 [self uploadNextImage] 继续上传下一张图片
// 在上传失败或取消时,可以根据需要进行错误处理或重试
WS(weakSelf)
self.isUploading = YES
dispatch_async(_queueUploadBegin, ^{
//等待信号量
dispatch_semaphore_wait(_semaphoreBegin, DISPATCH_TIME_FOREVER)
NSString *accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:kUserToken]
NSString *urlString = [HTTP_upload_getOssfsToken stringByAppendingString:[NSString stringWithFormat:@"?accessToken=%@",accessToken]]
//[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:@"11"]
[XWHttpClient xw_postWithUrlString:urlString Params:nil DefaultHUD:NO RepeatNum:1 TimeOutSecond:10 SuccessBlock:^(id returnValue) {
NSLog(@" ----- getOssfsToken - returnValue: %@",returnValue);
//处理耗时操作的代码块...
dispatch_async(dispatch_get_global_queue(0, 0), ^{
OssfsTokenModel *ossfsTokenModel = [OssfsTokenModel mj_objectWithKeyValues:DicGetValue(returnValue,@"data")]
id<OSSCredentialProvider> credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:ossfsTokenModel.accessKeyId secretKeyId:ossfsTokenModel.accessKeySecret securityToken:ossfsTokenModel.securityToken]
OSSClient *client = [[OSSClient alloc] initWithEndpoint:ossfsTokenModel.endpoint credentialProvider:credential]
OSSPutObjectRequest * put = [OSSPutObjectRequest new]
put.bucketName = ossfsTokenModel.bucket
NSString * uploadImgPath = ossfsTokenModel.uploadImgPath
NSString * objectKeyStr = [uploadImgPath substringFromIndex:1]
put.objectKey = objectKeyStr
imageModel.localImage = [UIImage compressImage:imageModel.localImage toByte:800000]
NSData *imageData = UIImageJPEGRepresentation(imageModel.localImage, 1)
put.uploadingData = imageData
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
NSString *sendSize = [SSUtility transformedValue:[NSNumber numberWithUnsignedLongLong:totalByteSent]]
NSString *totalSize = [SSUtility transformedValue:[NSNumber numberWithUnsignedLongLong:totalBytesExpectedToSend]]
SSLog(@"上传图片大小为: %@ --- 已上传: %@",totalSize,sendSize)
}
if (imageModel.questionRecommendRecordId) { // kHOST_ADDRESS -> kUPLOAD_ADDRESS
NSString *paramBody = @"{\"vipId\":${x:vipId},\"costype\":${x:costype},\"derverFileId\":${x:derverFileId},\"fileKeys\":${x:fileKeys},\"courseName\":${x:courseName},\"questionRecommendRecordId\":${x:questionRecommendRecordId}}"
// 正确的
put.callbackParam = @{@"callbackUrl":[NSString stringWithFormat:@"%@/api/parents/xy/homework/uploadPictureNoSubject?accessToken=%@",kHOST_ADDRESS,[SSUtility getUserToken]],
@"callbackBody":paramBody,
@"callbackBodyType":@"application/json"}
put.callbackVar = @{@"x:vipId":imageModel.vipId,
@"x:costype":@"1",
@"x:fileKeys":uploadImgPath,
@"x:courseName":imageModel.course,
@"x:derverFileId":imageModel.derverFileId,
@"x:questionRecommendRecordId":imageModel.questionRecommendRecordId}
}else {
NSString *paramBody = @"{\"vipId\":${x:vipId},\"costype\":${x:costype},\"derverFileId\":${x:derverFileId},\"fileKeys\":${x:fileKeys},\"courseName\":${x:courseName}}"
// 正确的
put.callbackParam = @{@"callbackUrl":[NSString stringWithFormat:@"%@/api/parents/xy/homework/uploadPictureNoSubject?accessToken=%@",kHOST_ADDRESS,[SSUtility getUserToken]],
@"callbackBody":paramBody,
@"callbackBodyType":@"application/json"}
put.callbackVar = @{@"x:vipId":imageModel.vipId,
@"x:costype":@"1",
@"x:fileKeys":uploadImgPath,
@"x:courseName":imageModel.course,
@"x:derverFileId":imageModel.derverFileId}
}
OSSTask * putTask = [client putObject:put]
[putTask waitUntilFinished]
[putTask continueWithBlock:^id(OSSTask *task) {
OSSPutObjectResult *result = task.result;
NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@",result.requestId,result.httpResponseHeaderFields,result.serverReturnJsonString);
NSDictionary *dataDict = [SSUtility dictionaryWithJsonString:result.serverReturnJsonString]
NSString *codeStr = dataDict[@"code"]
NSString *msgStr = dataDict[@"msg"]
if (!task.error) {
if ([codeStr isEqualToString:@"999"]) {
imageModel.image = uploadImgPath
NSString *imgUrl = [SSUtility getImageFullPathWithServerPath:uploadImgPath]
[[SDImageCache sharedImageCache] storeImage:imageModel.localImage forKey:imgUrl completion:^{
NSLog(@" --- &&&&&&&&&&&&&& --- 上传图片成功 --- 本地保存 --- ")
}]
// 上传成功后,删除本地图片数据
[[DataBaseHelper sharedInstance] deleteHomeworkImageModel:imageModel]
// if (successBlock) {
// successBlock(dataDict)
// }
NSLog(@"upload object success!")
}else {
dispatch_async(dispatch_get_main_queue(), ^{
[[SSCustomAlertView alloc] setAlertViewTitle:@"" andMessage:msgStr ? msgStr : @"作业上传失败" andhideAlertViewTimeOut:kDefaultAlertTime]
})
// if (errorBlock) {
// errorBlock(task.error)
// }
[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:@"6"]
}
} else {
NSLog(@"upload object failed, error: %@" , task.error)
dispatch_async(dispatch_get_main_queue(), ^{
[[SSCustomAlertView alloc] setAlertViewTitle:@"" andMessage:msgStr ? msgStr : @"作业上传失败" andhideAlertViewTimeOut:kDefaultAlertTime]
})
// if (errorBlock) {
// errorBlock(task.error)
// }
[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:@"6"]
}
[weakSelf uploadNextImageModel]
[[NSNotificationCenter defaultCenter] postNotificationName:kUploadImgSuccessNotificationName object:imageModel]
dispatch_semaphore_signal(_semaphoreBegin)
task = [client presignPublicURLWithBucketName:ossfsTokenModel.bucket withObjectKey:objectKeyStr]
return nil
}]
})
} ErrorBlock:^(id errorCode) {
// if (errorBlock) {
// errorBlock(errorCode)
// }
[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:@"6"]
[weakSelf uploadNextImageModel]
[[NSNotificationCenter defaultCenter] postNotificationName:kUploadImgSuccessNotificationName object:imageModel]
dispatch_semaphore_signal(_semaphoreBegin)
} FailureBlock:^(id failureInfo) {
// if (failBlock) {
// failBlock(failureInfo)
// }
[[DataBaseHelper sharedInstance] updateImageModel:imageModel withImageModelKey:@"correctStatus" andImageModelValue:@"6"]
[weakSelf uploadNextImageModel]
[[NSNotificationCenter defaultCenter] postNotificationName:kUploadImgSuccessNotificationName object:imageModel]
dispatch_semaphore_signal(_semaphoreBegin)
}]
})
}else { // 如果有imageModel
self.isUploading = NO
}
}
@end
四、拍照上传操作
// 上传作业图片
SSTEditTaskSujectFinishedPictureModel *subjectFinishPictureModel = [[SSTEditTaskSujectFinishedPictureModel alloc] init]
NSTimeInterval endTime = [[NSDate date] timeIntervalSince1970]*1000
NSInteger uploadTime = endTime
NSString *localImagePath = [NSString stringWithFormat:@"%@-%zd.jpg",[SSUtility getUserVipId],uploadTime]
subjectFinishPictureModel.course = self.subject
subjectFinishPictureModel.vipId = [SSUtility getUserVipId]
//subjectFinishPictureModel.uploadDate = [NSDate getDate:[NSDate date] day:4]
subjectFinishPictureModel.uploadDate = [NSDate getDateStringWithNowDate:[NSDate date]]
subjectFinishPictureModel.derverFileId = [NSString stringWithFormat:@"%@-%zd",[SSUtility getUserVipId],uploadTime]
subjectFinishPictureModel.localPath = localImagePath
subjectFinishPictureModel.timestampStr = [NSString stringWithFormat:@"%zd",uploadTime]
subjectFinishPictureModel.localImage = _photopImage
subjectFinishPictureModel.correctStatus = SSTHomeworkPictureStateUploading
subjectFinishPictureModel.studentName = [SSUtility getUserCurrentChildName]
//subjectFinishPictureModel.isLocalData = YES
//[[SSTUploadHomeworkPictureManager shareManager] saveUploadingHomewrokPhoto:subjectFinishPictureModel withVipId:self.vipId subject:self.courseName]
[[SSImageUploadQueueManager shareManager] enqueueImageModel:subjectFinishPictureModel]
五、上传列表数据获取
NSArray *uploadImgAllArr = [[DataBaseHelper sharedInstance] getAllHomeworkImageModel];
NSMutableArray *uploadImgErrorArr = [NSMutableArray array];
for (SSTEditTaskSujectFinishedPictureModel *imageModel in uploadImgAllArr) {
if (imageModel.correctStatus == SSTHomeworkPictureStateUploadFail) {
[uploadImgErrorArr addObject:imageModel];
}
}
[self.uploadImgArr removeAllObjects];
[self.uploadImgArr addObjectsFromArray:uploadImgAllArr];
[self.uploadImgErrorArr removeAllObjects];
[self.uploadImgErrorArr addObjectsFromArray:uploadImgErrorArr];
dispatch_async(dispatch_get_main_queue(), ^{
self.rightBtn.hidden = uploadImgErrorArr.count > 0 ? NO : YES;
[self.tableView reloadData];
});