-2

私は初心者なので、ばかげたことが判明しても驚かないでしょうが、initWithObjects を試行した後、なぜ NSArray haikuArray に何も含まれないのかを理解しようとして頭を壁にぶつけています。オブジェクト。何かご意見は?

Gay_HaikuViewController.h ファイル:

#import <UIKit/UIKit.h>
#import "Array Setup.h"

@interface Gay_HaikuViewController : UIViewController
{
Array_Setup *gayHaikuSetup;
Array_Setup *userHaikuSetup;
NSMutableArray *allHaiku;
IBOutlet UITextView *haikuText;
}

@property (nonatomic,retain) Array_Setup *gayHaikuSetup;
@property (nonatomic,retain) Array_Setup *userHaikuSetup;
@property (nonatomic,retain) NSMutableArray *allHaiku;
@property (nonatomic,retain) IBOutlet UITextView *haikuText;
-(IBAction)nextHaiku:(id)sender;

Gay_HaikuViewController.m ファイルの関連メソッド:

#import "Gay_HaikuViewController.h"
#import "Array Setup.h"

@interface Gay_HaikuViewController ()

@end

@implementation Gay_HaikuViewController

@synthesize gayHaikuSetup,userHaikuSetup,allHaiku,haikuText;

- (void)viewDidLoad
{
[super viewDidLoad];

NSArray *haikuArray = [gayHaikuSetup arrayOfGayHaiku];
haikuArray = [gayHaikuSetup readFromGayArray];
//This next line is how I know there are no objects in haikuArray.
NSLog(@"%d",[haikuArray count]);
NSMutableArray *userArray = [userHaikuSetup arrayOfUserHaiku];
userArray = [userHaikuSetup readFromUserArray];
allHaiku = [[NSMutableArray alloc] init];
for (int i=0; i<[haikuArray count]; i++)
    [allHaiku addObject:[haikuArray objectAtIndex:i]];
for (int i=0; i<[userArray count]; i++)
    [allHaiku addObject:[userArray objectAtIndex:i]];
}

Array_Setup.h ファイル:

#import <Foundation/Foundation.h>

@interface Array_Setup : NSObject
{
NSMutableArray *arrayOfUserHaiku;
NSArray *arrayOfGayHaiku;
}

@property (nonatomic,strong) NSMutableArray *arrayOfUserHaiku;
@property (nonatomic,strong) NSArray *arrayOfGayHaiku;

-(NSArray *)readFromGayArray;
-(NSMutableArray *)readFromUserArray;
-(NSMutableArray *)writeToUserArray;
-(void)addHaikuToArray;

@end

Array_Setup.m ファイル内の関連するメソッド:

#import "Array Setup.h"

@implementation Array_Setup

@synthesize arrayOfGayHaiku,arrayOfUserHaiku;

-(NSMutableArray *)readFromUserArray
{
arrayOfUserHaiku = [NSMutableArray alloc];
[arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
    NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else 
{
    NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}

-(NSArray *)readFromGayArray
{
NSArray *array = [NSArray alloc];
[array initWithObjects:@"Lorem", @"ipsum", nil]; 

return array;
}

@end

あなたの助けを前もってありがとう、男と女。

4

3 に答える 3

1

initWithObjects値を返しますが、戻り値に設定していませんarray

于 2012-07-20T04:07:45.473 に答える
0

このコードの重大な問題:

arrayOfUserHaiku = [NSMutableArray alloc];
[arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
    NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else 
{
    NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}
  1. allocと を分割しないでくださいinitinitメソッドは、返されたのと同じオブジェクトを返さない場合があります (多くの場合、実際には) alloc。つまり、次のようになります。

    arrayOfUserHaiku = [[NSMutableArray alloc] initWithContentsOfFile:@"/tmp/cool.txt"];

  2. errorそのコードの何かによって設定されることはありません。それはグローバルではありません。

  3. そのメソッドは、自動解放された配列を返す必要があります (非 ARC を想定)。

  4. コード内で静的文字列の大規模な配列を避ける必要があります。簡単にローカライズできる plist またはテキスト ファイルとしてアプリ ラッパーに配置します。

(そして、コメンターが示唆したように、アプリのコンテンツを質問に入れないでください-不快に感じる人もいるかもしれません)

于 2012-07-20T06:29:55.090 に答える
-1

Array_Setup.m ファイル:

   #import "Array_Setup.h"

@implementation Array_Setup

@synthesize arrayOfGayHaiku,arrayOfUserHaiku;

-(NSMutableArray *)readFromUserArray
{
    arrayOfUserHaiku = [[NSMutableArray alloc] initWithContentsOfFile:@"/tmp/cool.txt"];
 //   [arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
    NSError *error = nil;
    if (!arrayOfUserHaiku)
    {
        NSLog(@"Read failed: %@.",[error localizedDescription]);
    }
    else 
    {
        NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
    }
    return arrayOfUserHaiku;
}

-(NSArray *)readFromGayArray
{
    NSArray *array = [NSArray arrayWithObjects:@"I don't understand.\nYou love it when I do that--\nWait, no.  That's Stephen.",

     @"Frantically hiding\nPorno and Mapplethorpe prints--\nMom is on her way.",

     @"Remember when I\nSaid I disliked oral sex?\nI meant just with you.",

     @"You were perfection.\nThen you misspelled 'embarrassed.'\nDon't call me again.",

     //Am omitting a bunch of these to make my Stack Overflow question shorter.

     @"I know you think I\nLike it when you slap my ass.\nYou are mistaken.",

     @"Flailing to the beat--\nCould I possibly look half\nAs dumb as I feel?",

     @"Last night, you looked hot.\nToday, you want to discuss\nThe whole foods movement.", nil]; 

    return array;
}

@end

Gay_HaikuViewController.m ファイル:

userHaikuSetup= [[Array_Setup alloc] init];

gayHaikuSetup= [[Array_Setup alloc] init]; // [gayHaikuSetup arrayOfGayHaiku];

NSArray * haikuArray = [NSArray arrayWithArray: [gayHaikuSetup readFromGayArray]];
//This next line I added to find out whether the array had any objects--I always get 0.
NSLog(@"%lu",[haikuArray count]);

NSMutableArray *userArray = [userHaikuSetup readFromUserArray];
allHaiku = [[NSMutableArray alloc] init];
for (int i=0; i<[haikuArray count]; i++)
    [allHaiku addObject:[haikuArray objectAtIndex:i]];
for (int i=0; i<[userArray count]; i++)
    [allHaiku addObject:[userArray objectAtIndex:i]];


NSLog(@"%lu",[allHaiku count]);

これは実行できます。objective-c Program syntax book が表示されるはずです。

于 2012-07-20T07:21:30.863 に答える