Hi All,
I have got a very frustrating problem.  I am trying to upload video to  youtube 
using GData APIs and am having significant issues.  I am sure one of you will 
have done this previously and I hope you can assist me.

I have copied the cocoa sample and just put it in my code to get something 
working I can customise it later.  When this code executes it fails with the 
following error


*** Assertion failure in -[GDataServiceBase 
fetchObjectWithURL:objectClass:objectToPost:ETag:httpMethod:delegate:didFinishSelector:completionHandler:retryInvocationValue:ticket:](),
 
/Users/damien/damien/projects/google/gdata-objectivec-client-read-only/Source/BaseClasses/GDataServiceBase.m:559
*** Terminating app due to uncaught exception 
'NSInternalInconsistencyException', reason: 'GDataHTTPUploadFetcher needed'

Ok so I go to the source of the assertion failure

  //
  // now that we have all the request header info ready,
  // create and set up the fetcher for this request
  //
  GDataHTTPFetcher* fetcher = nil;

  if (isUploadingDataChunked) {
    // hang on to the user's requested chunk size, and ensure it's not tiny
    NSUInteger uploadChunkSize = [self serviceUploadChunkSize];
    if (uploadChunkSize < kMinimumUploadChunkSize) {
      uploadChunkSize = kMinimumUploadChunkSize;
    }

    Class uploadClass = NSClassFromString(@"GDataHTTPUploadFetcher");
    GDATA_ASSERT(uploadClass != nil, @"GDataHTTPUploadFetcher needed");

    NSString *uploadMIMEType = [objectToPost uploadMIMEType];
        
    fetcher = [uploadClass uploadFetcherWithRequest:request
                                         uploadData:uploadData
                                     uploadMIMEType:uploadMIMEType
                                          chunkSize:uploadChunkSize];

  } else {
    fetcher = [GDataHTTPFetcher httpFetcherWithRequest:request];
  }

So it appears the Class uploadClass = 
NSClassFromString(@"GDataHTTPUploadFetcher"); line fails.  This tells me that 
there is no instance of the GDataHTTPUploadFetcher class at this time.

Ok so what did I miss in my method I can not find any definition of a 
GDataHTTPUploadFetcher in the sample project.

I have provided my method below hoping someone can assist me by comparing mine 
to theirs and showing me where I have gone wrong.  I really appreciate your 
assistance.


here is a stack trace also

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   CoreFoundation                      0x028bfde4 
___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ + 4
1   libobjc.A.dylib                     0x93f5e509 objc_exception_throw + 56
2   CoreFoundation                      0x0288001b +[NSException 
raise:format:arguments:] + 155
3   Foundation                          0x00265ef5 -[NSAssertionHandler 
handleFailureInFunction:file:lineNumber:description:] + 101
4   eca                                 0x00029b13 -[GDataServiceBase 
fetchObjectWithURL:objectClass:objectToPost:ETag:httpMethod:delegate:didFinishSelector:completionHandler:retryInvocationValue:ticket:]
 + 2205 (GDataServiceBase.m:561)
5   CoreFoundation                      0x0283e87d __invoking___ + 29
6   CoreFoundation                      0x0283e768 -[NSInvocation invoke] + 136
7   eca                                 0x0002e7a7 -[GDataServiceGoogle 
authFetcher:finishedWithData:] + 552 (GDataServiceGoogle.m:249)
8   eca                                 0x00014816 -[GDataHTTPFetcher 
connectionDidFinishLoading:] + 651 (GDataHTTPFetcher.m:894)
9   Foundation                          0x0020e524 
-[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 84
10  Foundation                          0x0020e493 
_NSURLConnectionDidFinishLoading + 147
11  CFNetwork                           0x02be0e19 
URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*)
 + 197
12  CFNetwork                           0x02c541b2 
URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent,
 XClientEventParams>*, long) + 306
13  CFNetwork                           0x02c5447c 
URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent,
 XClientEventParams>*, long) + 1020
14  CFNetwork                           0x02c5447c 
URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent,
 XClientEventParams>*, long) + 1020
15  CFNetwork                           0x02bd4f24 
URLConnectionClient::processEvents() + 94
16  CFNetwork                           0x02bd4dae MultiplexerSource::perform() 
+ 238
17  CoreFoundation                      0x0280fd9a CFRunLoopRunSpecific + 3402
18  CoreFoundation                      0x0280f048 CFRunLoopRunInMode + 88
19  GraphicsServices                    0x02f539f1 GSEventRunModal + 217
20  GraphicsServices                    0x02f53ab6 GSEventRun + 115
21  UIKit                               0x00468a98 UIApplicationMain + 1134
22  eca                                 0x000022a8 main + 102 (main.m:14)
23  eca                                 0x00002216 start + 54


- (int)uploadToService:(NSData *)movieData ofType:(NSString *)dataType 
withContentName:(NSString *)movieName
{
        
        NSString *devKey = [self developerKey];
        
        GDataServiceGoogleYouTube *service = [self youTubeService];
        [service setYouTubeDeveloperKey:devKey];
        
        NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:[self 
userName] clientID:@""];
        
        // load the file data
        NSData *data = [NSData dataWithData: movieData];
        NSString *filename = contentName;
        
        // gather all the metadata needed for the mediaGroup
        NSString *titleStr = @"Test";
        GDataMediaTitle *title = [GDataMediaTitle 
textConstructWithString:titleStr];
        
        NSString *categoryStr = @"";
        GDataMediaCategory *category = [GDataMediaCategory 
mediaCategoryWithString:categoryStr];
        [category setScheme:kGDataSchemeYouTubeCategory];
        
        NSString *descStr = @"Test";
        GDataMediaDescription *desc = [GDataMediaDescription 
textConstructWithString:descStr];
        
        NSString *keywordsStr = @"Test";
        GDataMediaKeywords *keywords = [GDataMediaKeywords 
keywordsWithString:keywordsStr];
        
        BOOL isPrivate = YES;
        
        GDataYouTubeMediaGroup *mediaGroup = [GDataYouTubeMediaGroup 
mediaGroup];
        [mediaGroup setMediaTitle:title];
        [mediaGroup setMediaDescription:desc];
        [mediaGroup addMediaCategory:category];
        [mediaGroup setMediaKeywords:keywords];
        [mediaGroup setIsPrivate:isPrivate];
        
        NSString *mimeType = @"video/quicktime";//[GDataUtilities 
MIMETypeForFileAtPath:path defaultMIMEType:@"video/quicktime"];
        
        // create the upload entry with the mediaGroup and the file data
        GDataEntryYouTubeUpload *entry = [GDataEntryYouTubeUpload 
uploadEntryWithMediaGroup:mediaGroup data:data MIMEType:mimeType slug:filename];
        
        SEL progressSel = 
@selector(ticket:hasDeliveredByteCount:ofTotalByteCount:);
        
        [service setServiceUploadProgressSelector:progressSel];
        
        GDataServiceTicket *ticket = [service fetchEntryByInsertingEntry:entry 
forFeedURL:url delegate:self 
didFinishSelector:@selector(uploadTicket:finishedWithEntry:error:)];
        
        [self setUploadTicket:ticket];
        
        return 0;
}

Best regards
Damien

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to