1

Seems to be almost a duplicate of this question, but the answer there hasn't addressed the problem.

first.h

extern PlanningDocumentService *folderService;

first.m

#import first.h

- (void)serviceDefinition
 {    
    PlanningDocumentService *folderService = [_myDocumentViews objectAtIndex:[_gridView indexOfSelectedItem]];   
    detail.service = folderService;
 }

second.h

#import first.h

second.m

#import second.h

+(NSArray*)getDocumentData
{
     NSString *passedCaption =  folderService.caption;
}

Gives the error:

Undefined symbols for architecture i386:
  "_folderService", referenced from:
      +[GenericService getDocumentData] in GenericService.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I haven't declared or defined folderService anywhere other than the files above. Any ideas welcomed.

Community
  • 1
  • 1
Robert
  • 5,278
  • 43
  • 65
  • 115

2 Answers2

4

You need to define folderService to have global scope:

first.m:

#import "first.h"

PlanningDocumentService *folderService = nil;

- (void)serviceDefinition
{    
    folderService = [_myDocumentViews objectAtIndex:[_gridView indexOfSelectedItem]];   
    detail.service = folderService;
}
trojanfoe
  • 120,358
  • 21
  • 212
  • 242
3

PlanningDocumentService *folderService within - (void)serviceDefinition makes the variable local to the function, but not global. But extern PlanningDocumentService *folderService declares the existence of a global variable, that is never defined.

Matthias
  • 8,018
  • 2
  • 27
  • 53