Xcode 无法将字符串移交给我的方法

Xcode 无法将字符串移交给我的方法,xcode,ios4,Xcode,Ios4,我有一个问题,在得到一个方法来工作,我完全困惑。 我无法将字符串作为变量传递给我的方法 我甚至使用字符串调用函数,当前没有变量 Engine *myEngine = [Engine sharedInstance]; [myEngine getContentArrayFromEngine:@"zumbra"]; 我的方法 -(NSMutableArray*) getContentArrayFromEngine:(NSString *)catName{ NSMutableSet* c

我有一个问题,在得到一个方法来工作,我完全困惑。 我无法将字符串作为变量传递给我的方法

我甚至使用字符串调用函数,当前没有变量

     Engine *myEngine = [Engine sharedInstance];
 [myEngine getContentArrayFromEngine:@"zumbra"]; 
我的方法

-(NSMutableArray*) getContentArrayFromEngine:(NSString *)catName{
NSMutableSet* categorieContent = [[NSMutableSet alloc] init];
NSLog(@"Catname:%@", catName);   
//some more code
}
NSLOG输出 2011-12-18 18:49:44.165 Zitate[77224:15203]猫名:空

为什么catName是空的

edit1:完整的代码 第三个虚拟控制器

 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
 NSString* myTempCatname;
 myTempCatname = cell.textLabel.text; 

//  NSLog(@"test select %@", myTempCatname);

DetailViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"detailzitat"];
[self.navigationController pushViewController:detailVC animated:YES];
 Engine *myEngine = [Engine sharedInstance];
 [myEngine getContentArrayFromEngine:myTempCatname]; 
#import "ThirdViewController.h"
#import "engine.h"
#import "DetailViewController.h"

@implementation ThirdViewController
@synthesize CategoryList;


- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    Engine *myEngine = [Engine sharedInstance];
    CategoryList = [myEngine getCategories];
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {


    return [CategoryList count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier =@"Cell";
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }


    cell.textLabel.text = [CategoryList objectAtIndex:indexPath.row];
    return cell;

}


 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
 NSString* myTempCatname;
 myTempCatname = cell.textLabel.text; 


DetailViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"detailzitat"];
[self.navigationController pushViewController:detailVC animated:YES];
 Engine *myEngine = [Engine sharedInstance];
 [myEngine setCategName:myTempCatname];
 NSLog(@"Aufruf %@", myTempCatname);
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


@end
#import "DetailViewController.h"

@implementation DetailViewController
@synthesize contentTextView;
@synthesize authorText, contentText, categoryText, titleText, imageText;
@synthesize authorLabel, categoryLabel, titleLabel;
@synthesize contentArray;
@synthesize catName;

int contentIndex;
int contentMax;

- (IBAction)swipeDetected:(UIGestureRecognizer *)sender {

    NSLog(@"Right Swipe detected");
}


-(IBAction) vorher:(id)sender {
NSLog(@"-----VORHER Button gedrückt-------");

if (contentIndex==0) {contentIndex=contentMax-1;}
else {contentIndex--;}

titleText = [[contentArray objectAtIndex:contentIndex] objectForKey:TITLE];
authorText= [[contentArray objectAtIndex:contentIndex] objectForKey:AUTHOR];
contentText= [[contentArray objectAtIndex:contentIndex] objectForKey:CONTENT];    
authorLabel.text=authorText;
titleLabel.text=titleText;
contentTextView.text=contentText;
}

-(IBAction) nachher:(id)sender {
NSLog(@"-----Nachher Button gedrückt-------");

if (contentIndex==contentMax-1) {contentIndex=0;}
else {contentIndex++;}

titleText = [[contentArray objectAtIndex:contentIndex] objectForKey:TITLE];
authorText= [[contentArray objectAtIndex:contentIndex] objectForKey:AUTHOR];
contentText= [[contentArray objectAtIndex:contentIndex] objectForKey:CONTENT]; 
authorLabel.text=authorText;
titleLabel.text=titleText;
contentTextView.text=contentText;
}


- (void)didReceiveMemoryWarning
{ 
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
Engine *myEngine = [Engine sharedInstance];
contentArray = [myEngine getContentArrayFromEngine];
contentMax = [contentArray count];


UISwipeGestureRecognizer *swipeRecognizerRight = 
[[UISwipeGestureRecognizer alloc]
 initWithTarget:self 
 action:@selector(vorher:)];
swipeRecognizerRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRecognizerRight];

UISwipeGestureRecognizer *swipeRecognizerLeft = 
[[UISwipeGestureRecognizer alloc]
 initWithTarget:self 
 action:@selector(nachher:)];
swipeRecognizerLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizerLeft];

titleText = [[contentArray objectAtIndex:contentIndex] objectForKey:TITLE];
authorText= [[contentArray objectAtIndex:contentIndex] objectForKey:AUTHOR];
contentText= [[contentArray objectAtIndex:contentIndex] objectForKey:CONTENT]; 
authorLabel.text=authorText;
titleLabel.text=titleText;
contentTextView.text=contentText;    
}


- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end
}

在引擎里

-(NSMutableArray*) getContentArrayFromEngine:(NSString *)catName{
NSMutableSet* categorieContent = [[NSMutableSet alloc] init];
NSLog(@"Übergebener Catname:%@", catName);
//  catName=@"zumbra";

//     NSLog(@"Inhalt InhalteFromWeb:%@", InhalteFromWeb);
NSLog(@"Catname:%@", catName);


unsigned count = [InhalteFromWeb count];
while (count--) {
    NSLog(@"count %d %@", count, [[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY]);
    if([[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY] isEqualToString:catName]) {
        [categorieContent addObject:[InhalteFromWeb objectAtIndex:count]];
  NSLog(@"Row %d has Content%@",count, [InhalteFromWeb objectAtIndex:count]);
    }   
}
NSLog(@"Inhalt Category:%@", categorieContent);
NSArray* tempAr = [[NSArray alloc] initWithArray:[categorieContent allObjects]];

return  [NSMutableArray arrayWithArray:tempAr];
}

编辑2: 好的,即使是带有catName的提示也不起作用。所以我对代码做了一点修改

我有一个数组,每行有一个类别、标题、内容、作者和图像

我想做两件事 1获得所有类别的唯一列表,其工作正常 2当点击其中一个类别时,打开detailView,显示该类别的第一个元素,通过四处滑动跳转到类别中的上一个和下一个项目

为此,我将设置我选择的类别 第一次尝试是用这种方法进行切换,但没有成功。 现在我想,在我的engine.h中设置类别,并在显示单个项目时,获取该类别的数组

但是,类别的值也不会被存储

第三个虚拟控制器

#import <UIKit/UIKit.h>
#import "SecondViewController.h"


@interface ThirdViewController :  UIViewController<UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray* CategoryList;
}

@property (nonatomic, retain) NSMutableArray* CategoryList;

@end
#import <UIKit/UIKit.h>
#import <MessageUI/MFMailComposeViewController.h>
#import "engine.h"

@interface DetailViewController : UIViewController<MFMailComposeViewControllerDelegate> {
IBOutlet UILabel *authorLabel;
IBOutlet UILabel *categoryLabel; 
IBOutlet UILabel *titleLabel;
IBOutlet UITextView *contentTextView;
NSString *authorText, *contentText, *categoryText, *titleText, *imageText, *catName;
NSMutableArray *contentArray;
}

@property (nonatomic, retain) IBOutlet UITextView *contentTextView;
@property (nonatomic, retain) IBOutlet UILabel *authorLabel;
@property (nonatomic, retain) IBOutlet UILabel *categoryLabel;
@property (nonatomic, retain) IBOutlet UILabel *titleLabel;
@property (nonatomic, retain) NSString  *authorText, *contentText, *categoryText, *titleText, *imageText, *catName;
@property (nonatomic, retain) NSMutableArray *contentArray;


-(IBAction)vorher:(id)sender;
-(IBAction)nachher:(id)sender;
@end
DetailViewController.h

#import <UIKit/UIKit.h>
#import "SecondViewController.h"


@interface ThirdViewController :  UIViewController<UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray* CategoryList;
}

@property (nonatomic, retain) NSMutableArray* CategoryList;

@end
#import <UIKit/UIKit.h>
#import <MessageUI/MFMailComposeViewController.h>
#import "engine.h"

@interface DetailViewController : UIViewController<MFMailComposeViewControllerDelegate> {
IBOutlet UILabel *authorLabel;
IBOutlet UILabel *categoryLabel; 
IBOutlet UILabel *titleLabel;
IBOutlet UITextView *contentTextView;
NSString *authorText, *contentText, *categoryText, *titleText, *imageText, *catName;
NSMutableArray *contentArray;
}

@property (nonatomic, retain) IBOutlet UITextView *contentTextView;
@property (nonatomic, retain) IBOutlet UILabel *authorLabel;
@property (nonatomic, retain) IBOutlet UILabel *categoryLabel;
@property (nonatomic, retain) IBOutlet UILabel *titleLabel;
@property (nonatomic, retain) NSString  *authorText, *contentText, *categoryText, *titleText, *imageText, *catName;
@property (nonatomic, retain) NSMutableArray *contentArray;


-(IBAction)vorher:(id)sender;
-(IBAction)nachher:(id)sender;
@end
引擎

//#import 

#define AUTHOR  @"author"
#define CATEGORY  @"cat"
#define CONTENT  @"content"
#define IMAGE @"image"
#define TITLE @"title"


@interface Engine : NSObject {
        NSMutableArray* InhalteFromWeb;
    NSInteger maxAnzahlInhalte;
    NSString* categNameStorage;
}

+ (Engine *) sharedInstance;

- (NSMutableArray*) getZitateArrayFromEngine;
- (NSInteger) getMaxAnzahlZitateFromEngine;

- (NSString*) getAutor:(NSInteger)pos;
- (NSString*) getZitat:(NSInteger)pos;

- (NSString*) getAuthor:(NSInteger)pos;
- (NSString*) getCategory:(NSInteger)pos;
- (NSString*) getContent:(NSInteger)pos;
- (NSString*) getImage:(NSInteger)pos;
- (NSString*) getTitle:(NSInteger)pos;

-(NSMutableArray*) getContentArrayFromEngine;
-(void) setCategName:(NSString *) categNameVariable;
-(NSString*) getCategName;

-(NSMutableArray*) getCategories;

@end
引擎

#import "Engine.h"

@implementation Engine

static Engine *_sharedInstance;

- (id) init
{
    if (self = [super init])
    {
        // custom initialization

        //Beginn my code
        NSURL *url = [NSURL URLWithString:@"http://www.*/iMotivate.plist"];
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

        if( theConnection )
        {

            InhalteFromWeb = [[NSMutableArray alloc] initWithContentsOfURL:url];
            maxAnzahlInhalte = [InhalteFromWeb count];
        }
        else
        {
            NSLog(@"Connection failed");
        }
    }
    return self;
}


-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
  //  NSLog(@"Recieving Response...");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

 //   NSLog(@"Recieving Data...");

}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                   message : @"An error has occured.Please verify your internet connection."
                                                   delegate:nil
                                         cancelButtonTitle :@"OK"
                                         otherButtonTitles :nil];
    [alert show];



}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

  //  NSLog(@"DONE. Received Quotes: %d", maxAnzahlZitate);
}




// ###########

+ (Engine *) sharedInstance
{
    if (!_sharedInstance)
    {
        _sharedInstance = [[Engine alloc] init];
    }

    return _sharedInstance;
}

// Getter and Setter for WebArray
- (NSMutableArray*) getZitateArrayFromEngine{
    return InhalteFromWeb;

}
- (NSInteger) getMaxAnzahlZitateFromEngine{
    return maxAnzahlInhalte;
}

- (NSString*) getAutor:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:AUTHOR];

}
- (NSString*) getZitat:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:CONTENT];
}

// #######

- (NSString*) getAuthor:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:AUTHOR];

}

- (NSString*) getCategory:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:CATEGORY];

}

- (NSString*) getContent:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:CONTENT];

}

- (NSString*) getImage:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:IMAGE];

}
- (NSString*) getTitle:(NSInteger)pos{
    return [[InhalteFromWeb objectAtIndex:pos] objectForKey:TITLE];

}

-(NSArray*) getCategories {
    NSMutableSet* categorieSet = [[NSMutableSet alloc] init];

    unsigned count = [InhalteFromWeb count];
    while (count--) {
        NSString *tempString;
        tempString=[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY];
  //      NSLog(@"tempString %@", tempString );

        [categorieSet addObject:tempString];
    }
 //   NSLog(@"categories from engine %@", categorieSet);
    NSArray* tempAr = [[[NSArray alloc] initWithArray:[categorieSet allObjects]]sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

    return  [NSMutableArray arrayWithArray:tempAr];

}

-(void) setCategName:(NSString *) categNameVariable
{   NSLog(@"categNameStorage 2%@",categNameStorage);
    categNameStorage=categNameVariable;
    NSLog(@"setCategName 1 %@",categNameVariable);
    NSLog(@"categNameStorage 2%@",categNameStorage);
}

-(NSString*) getCategName {
    return categNameStorage;
}



-(NSMutableArray*) getContentArrayFromEngine{
    NSMutableSet* categorieContent = [[NSMutableSet alloc] init];
    NSLog(@"Übergebener Catname:%@", categNameStorage);  
   //     NSLog(@"Inhalt InhalteFromWeb:%@", InhalteFromWeb);


    unsigned count = [InhalteFromWeb count];
    while (count--) {
 //       NSLog(@"count %d %@", count, [[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY]);
        if([[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY] isEqualToString:categNameStorage]) {
            [categorieContent addObject:[InhalteFromWeb objectAtIndex:count]];
 //     NSLog(@"Row %d has Content%@",count, [InhalteFromWeb objectAtIndex:count]);
        }   
    }
 //   NSLog(@"Inhalt Category:%@", categorieContent);
    NSArray* tempAr = [[NSArray alloc] initWithArray:[categorieContent allObjects]];

    return  [NSMutableArray arrayWithArray:tempAr];
}


@end

视图控制器中必须存在与“catName”冲突的变量。我不确定为什么视图控制器会在作用域中,但我打赌如果您将参数更改为inCatName,它会很好。出于这个原因,最好使用这样的命名约定。

目前,这段代码应该按照您的预期记录zumbra。问题中一定缺少什么…添加了完整的代码。。。。在我将catName直接设置为getContentArrayFromEngineIs catName中的一个值之前,它是不起作用的,是否有可能是引擎类中的一个实例变量?如果在参数中更改变量的名称,是否有效?不,不是这样。我现在已经插入了所有相关的6个文件。我现在完全迷路了,怎么了。我不明白为什么我没有设置这个变量,即使在我的engine.hIs cell.textLabel.text empty中使用全局变量,还是它给了你想要的值?您应该使用调试器逐步完成此操作,并找到它失败的确切点。把范围缩小到最简单的失败案例。发布整个代码库是没有帮助的。